SpringMVC通过RESTful结构实现页面数据交互

需求分析

需求一:图片列表查询,从后台返回数据,将数据展示在页面上

SpringMVC通过RESTful结构实现页面数据交互_第1张图片

需求二:新增图片,将新增图书的数据传递到后台,并在控制台打印

SpringMVC通过RESTful结构实现页面数据交互_第2张图片

说明:此次案例的重点是在SpringMVC中如何使用RESTful实现前后台交互,所以本案例并没有和数据库进行交互,所有数据使用数据来完成开发。

我们的基本步骤:

  • 搭建项目导入jar包
  • 编写Controller类,提供两个方法,一个用来做列表查询,一个用来做新增
  • 在方法上使用RESTful进行路径设置
  • 完成请求、参数的接收和结果的响应
  • 使用PostMan进行测试
  • 将前端页面拷贝到项目中
  • 页面发送ajax请求
  • 完成页面数据的展示

环境准备

创建一个Web的Maven项目

pom.xml添加Spring依赖



  4.0.0
  com.nefu
  springmvc_try
  1.0-SNAPSHOT
  war
  
    
      javax.servlet
      javax.servlet-api
      3.1.0
      provided
    
    
      org.springframework
      spring-webmvc
      5.2.10.RELEASE
    
    
      com.fasterxml.jackson.core
      jackson-databind
      2.9.0
    
  
  
    
      
        org.apache.tomcat.maven
        tomcat7-maven-plugin
        2.1
        
          80
          /
        
      
    
  

创建对应的配置类

public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    protected Class[] getRootConfigClasses() {
        return new Class[0];
    }
    protected Class[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    //乱码处理
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};
    }
}
@Configuration
@ComponentScan("com.nefu.controller")
//开启json数据类型自动转换
@EnableWebMvc
public class SpringMvcConfig {
}

编写模型类Book

public class Book {
    private Integer id;
    private String type;
    private String name;
    private String description;
    //setter...getter...toString略
}

编写BookController

@Controller
public class BookController {
}

项目结构:

SpringMVC通过RESTful结构实现页面数据交互_第3张图片

后台接口开发

步骤1:编写Controller类并使用RESTful进行配置

@RestController
@RequestMapping("/books")
public class BookController {
    @PostMapping
    public String save(@RequestBody Book book){
        System.out.println("book save ==> "+ book);
        return "{'module':'book save success'}";
    }
 	@GetMapping
    public List getAll(){
        System.out.println("book getAll is running ...");
        List bookList = new ArrayList();
        Book book1 = new Book();
        book1.setType("计算机");
        book1.setName("SpringMVC入门教程");
        book1.setDescription("小试牛刀");
        bookList.add(book1);
        Book book2 = new Book();
        book2.setType("计算机");
        book2.setName("SpringMVC实战教程");
        book2.setDescription("一代宗师");
        bookList.add(book2);
        Book book3 = new Book();
        book3.setType("计算机丛书");
        book3.setName("SpringMVC实战教程进阶");
        book3.setDescription("一代宗师呕心创作");
        bookList.add(book3);
        return bookList;
    }
}

步骤2:使用PostMan进行测试

测试新增

{
    "type":"计算机丛书",
    "name":"SpringMVC终极开发",
    "description":"这是一本好书"
}

SpringMVC通过RESTful结构实现页面数据交互_第4张图片

测试查询

SpringMVC通过RESTful结构实现页面数据交互_第5张图片

页面访问处理

步骤1:拷贝静态页面

将资料\功能页面下的所有内容拷贝到项目的webapp目录下

SpringMVC通过RESTful结构实现页面数据交互_第6张图片

步骤2:访问pages目录下的books.html

打开浏览器输入http://localhost/pages/books.html

SpringMVC通过RESTful结构实现页面数据交互_第7张图片

(1)出现错误的原因?

SpringMVC通过RESTful结构实现页面数据交互_第8张图片

SpringMVC拦截了静态资源,根据/pages/books.html去controller找对应的方法,找不到所以会报404的错误。

(2)SpringMVC为什么会拦截静态资源呢?

SpringMVC通过RESTful结构实现页面数据交互_第9张图片

(3)解决方案?

SpringMVC需要将静态资源进行放行。

@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
    //设置静态资源访问过滤,当前类需要设置为配置类,并被扫描加载
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        //当访问/pages/????时候,从/pages目录下查找内容
        registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
        registry.addResourceHandler("/js/**").addResourceLocations("/js/");
        registry.addResourceHandler("/css/**").addResourceLocations("/css/");
        registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
    }
}

该配置类是在config目录下,SpringMVC扫描的是controller包,所以该配置类还未生效,要想生效需要将SpringMvcConfig配置类进行修改

@Configuration
@ComponentScan({"com.nefu.controller","com.nefu.config"})
@EnableWebMvc
public class SpringMvcConfig {
}
//或者
@Configuration
@ComponentScan("com.nefu")
@EnableWebMvc
public class SpringMvcConfig {
}

注意:

此处有人可能会想着把SpringMvcSupport配置类上的@Configuration注解给去掉,然后在SpringMvcConfig文件中使用@Import进行引入这样是不行的!因为这样的话实际上是让SpringMvcConfig引入SpringMvcSupport配置类中所有的bean,但是你SpringMvcSupport配置类中就重写了一个方法,压根就没有bean。所以不能使用。 例如像下面这种才可以使用:

@Configuration
public class ImportedConfig {
   @Bean
   public ImportedBean getImportedBean(){
       return new ImportedBean();
   }
}

具体的@Import注解使用规则,可以参考下面的链接:

@Import注解详解

步骤3:修改books.html页面



    
        
        
        SpringMVC案例
        
        
        
        
    
    
        

图书管理

查询 新建

到此这篇关于SpringMVC通过RESTful结构实现页面数据交互的文章就介绍到这了,更多相关SpringMVC RESTful内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

你可能感兴趣的:(SpringMVC通过RESTful结构实现页面数据交互)