1、处理器映射
如果Web工程使用了Spring MVC,那么它在启动阶段就会将注解@RequestMapping所配置的内容保存到处理器映射(HandlerMapping)机制中去,然后等待请求的到来,通过拦截请求信息与HandlerMapping进行匹配,找到对应的处理器(它包含控制器的逻辑),并将处理器及其拦截器保存到HandlerExecutionChain对象中,返回给DispatcherServlet,这样DispatcherServlet就可以运行它了。
2、获取控制器参数
2.1、在无注解下获取参数
2.2、使用@RequestParam获取参数
在默认情况下@RequestParam标注的参数是不能为空的,为了让它能够为空,可以配置其属性required为false。
2.3、传递数组
2.4、传递JSON
参数标注为@RequestBody,意味着它将接收前端提交的JSON请求体。
2.5、通过URL传递参数
2.6、获取格式化参数
对日期和数字类型的转换注解进行处理,分别是@DateTimeFormat和@NumberFormat。
在Spring Boot中,日期参数的格式化也可以不使用@DateTimeFormat,而只在配置文件application.properties中加入如下配置项即可:
spring.mvc.date-format=yyyy-MM-dd
3、自定义参数转换规则
3.1、处理器获取参数逻辑
当一个请求来到时,在处理器执行过程中,它首先会从HTTP请求和上下文环境来得到参数。如果时简易的参数它会以简单的转换器进行转换,而这些简单的转换器是Spring MVC自身已经提供了的。但是如果时转换HTTP请求体(Body),它就会调用HttpMessageConvert接口的方法对请求体的信息进行转换,首先它会判断能否对请求体进行转换,如果可以就会将其转换为Java类型。
在Spring MVC中,是通过WebDataBinder机制来获取参数的,它的主要作用是解析HTTP请求的上下文,然后在控制器的调用之前转换参数并且提供验证的功能,为调用控制器方法做准备。
处理器会从HTTP请求中读取数据,然后通过三种接口来进行各类参数转换,这三种接口是Converter、Formatter和GenericConverter。在SpringMVC的机制中这三种接口的实现类都采用了注册机的机制,默认的情况下Spring MVC已经在注册机内注册了许多的转换器,这样可以实现大部分的数据类型的转换,所以在大部分的情况下无需开发者再提供转换器。
Converter是一个普通的转换器,例如:有一个Integer类型的控制器参数,而从HTTP对应的为字符串,对应的Converter就会将字符串转换为Integer类型;其次,Formatter则是一个格式化转换器,类似那些日期字符串就是通过它按照约定的格式转换为日期的;最后,GenericConverter转换器则将HTTP参数转换为数组。
对于数据类型转换,Spring MVC提供了一个服务机制去管理,它就是ConversionService接口。在默认的情况下,会使用这个接口的子类DefaultFormattingConversionService对象来管理这些转换类。
3.2、一对一转换器(Convert)
3.3、GenericConverter集合和数组转换
4、数据验证
4.1、JSR-303验证
4.2、参数验证机制
5、数据模型
6、视图和视图解析器
视图是渲染数据模型展示给用户的组件,在Spring MVC中又分为逻辑视图和非逻辑视图。逻辑视图是需要视图解析器(ViewResolver)进行进一步定位的。对于非逻辑视图,则并不需要进一步地定位视图的位置,它只需要直接将数据模型渲染出来即可。
6.1、视图设计
7、文件上传
7.1、Spring MVC对文件上传的支持
7.2、开发文件上传功能
8、拦截器
8.1、拦截器的设计
8.2、开发拦截器
8.3、多个拦截器的顺序
9、国际化
9.1、国际化消息源
9.2国际化解析器
9.3、国际化示例
10、Spring MVC拾遗
10.1、@ResponseBody转换为JSON的秘密
10.2、重定向
10.3、操作会话对象
10.4、给控制器增加通知
10.5、获取请求头参数