一、SpringMVC简介

1.SpringMVC概述

        SpringMVC与Servlet技术具有相同的功能,都属于web层的开发技术。前者是一种基于Java实现MVC模型的轻量级web框架

2.优点

        相比于servlet代码量更少,灵活性强。

二、SpringMVC的使用

1.导入SpringMVC和Servlet坐标

        

2.创建SpringMVC控制器类(等同于servlet的功能)

        1)将该类定义为Bean

                表现层的Bean用@Controller

        2)定义方法

        3)配置该方法的页面访问路径

                @RequestMapping("/请求访问路径"),相当于以前的@Servlet("")

        4)@ResponseBody

                将2)定义的方法的返回值作为响应体发送给浏览器:
        

3.初始化SpringMVC环境

        创建SpringMvcConfig配置类,扫描SpringMVC加载对应的Bean(控制器类)
        

4.创建servlet容器启动的配置类★

        DispatcherServlet是前置控制器,用来拦截匹配的请求,Servlet拦截匹配规则自己定义,把拦截下来的请求,依据相应的规则分发到目标Controller来处理。
        AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化web3.0容器的抽象类。
        

三、Bean加载控制

1.Controller加载控制和业务Bean记载控制

        SpringMVC加载表现层Bean(Controller),Spring加载业务Bean(Service)和功能Bean(DataSource)等。在我们的包结构下这些Bean都放在com包下,因此要控制SpringMVC只加载表现层Bean,Spring加载其控制的Bean的同时时不加载表现层Bean。所以需要在加载Spring控制的Bean时排除掉SpringMVC控制的Bean。
        

(1)SpringMVC相关Bean加载控制

        SpringMVC加载的Bean对应的包均在com.controller包内。

(2)Spring相关Bean加载控制

        1)法一:设定精确扫描范围,如service包、dao包等

                

        2)法二:设定扫描范围为com包,然后排除掉controller包

                excludeFilters属性的作用是,排除扫描路径中加载的Bean,需要指定排除方式type(即按什么规则排除)和具体项classes(要排除哪些),这里排除方式是FilterType.ANNOTATION(按注解方式排除),具体项是Controller.class(排除所有@Controller注解的Bean)。
                

2.加载SpringMVC和Spring配置类

(1)普通开发

        

(2)简化开发

        继承AbstractAnnotationConfigDispatcherServletInitializer,只需要提供配置类即可加载。
        

四、Request请求

1.设置请求访问路径

        @RequestMapping:用来设置controller方法的请求访问路径。放在方法定义上方,代表设置当前方法的请求访问路径;放在类定义上方,代表设置当前controller所有方法的请求访问路径前缀
        
        

2.两种请求方式发送数据

(1)Get请求

        1)使用PostMan发送数据

                 采用url地址传参,即:url?数据1&数据2
                

        2)controller接收数据

                ①请求参数名与形参同名
                
                ②请求参数名与形参名不同使用@RequestParam进行映射,将name映射到userName:
                

(2)Post请求

        1)使用PostMan发送数据

                 Post请求方式下,数据在请求体(Body)里,所以要点Body按钮。
                

        2)controller接收数据

                在形参定义接收数据的同名参数:
                

(3)处理中文乱码问题

        使用过滤器(Filter)处理中文乱码问题。
        1)在Servlet启动配置类中配置字符过滤器(CharacterEncodingFilter)
        2)设置字符集setEncoding("UTF-8")
        

3.请求参数的传递

(1)普通参数(同上)

(2)pojo参数

        1)发送参数
                同普通参数
        2)接收参数
                将pojo类定义为形参

(3)pojo嵌套pojo

         如User中嵌套Address:
        
        1)发送参数
                
        2)接收数据(同pojo参数)

(4)数组参数

        1)发送参数
                多个“KEY”同名:
                
        2)接收数据
                

(5)集合参数

        1)发送参数
                同数组参数
        2)接收数据
                

(6)★json数据参数传递

        1)导处理json数据的坐标(jackson-databind)

                

        2)在SpringMvcConfig上开启json与pojo的转换功能

                

        3)发送json数据

                ①json数组
                        
                ②json对象
                        
                ③json对象数组
                        

        4)接收数据

                因为json数据在请求体(requestbody)里,在形参前加@RequestBody,表示将requestbody中的json数据传递给请求形参:
                ①json数组
                        
                ②json对象
                        
                ③json对象数组
                        

【tips】@RequestParam与@RequestBody的区别

                    ①@RequestParam:用于接收url地址传参和表单传参(application/x-www-form-urlencoded);
                    ②@RequestBody:用于接收json数据(application/json

(7)日期类型(Date)参数传递

        1)发送数据

                

        2)接收数据

                用@DateTimeFormat( pattern = "发送的日期类型格式" )来接收指定格式的日期类型参数:
                

五、Response响应

        响应页面和数据时,不加@ResponseBody,表示响应页面;加上,表示响应数据。

1.响应页面

        不需要加@ResponseBody,直接返回要访问的页面:
        

2.响应数据

(1)响应文本数据

        加@ResponseBody,返回文本数据:
        

(2)★响应json数据(pojo对象、pojo集合对象)

        加@ResponseBody,将返回值类型设为要响应的数据类型,直接返回要相应的数据: