一、概述
- spring-mvc 主要是DispatcherServlet工作流程
- 流程可以分为两块,第一块为DispatcherServlet的加载,第二块为请求处理
二、DispatcherServlet的加载
主要依靠三个对象
-
DispatcherServletRegistrationBean:实现了ServletContextInitializer接口,在tomcat启动后创建完成ServletContext时,将DispatcherServlet交给tomcat
2. DispatcherServletAutoConfiguration:定义了DispatcherServlet和DispatcherServletRegistrationBean
3. TomcatStarter:其实现了ServletContainerInitializer接口,将DispatcherServlet放入Tomcat
主要分为二步 -
DispatcherServlet放入spring容器
- 从容器里获取DispatcherServlet放入tomcat
三、主流程
-
涉及组件
- FlashMapManager:重定向时,会带上前一次请求的数据。
- MultipartResolver:处理http content-type= multipart/form-data类型的请求
- HandlerMapping:处理映射,根据路径寻找指定controller和拦截器链,调用拦截器
- HandlerAdapter:处理controller对象调用,包括请求参数的解析,方法调用,响应处理
- RequestToViewNameTranslator:以在处理器返回的View为空时,使用它根据Request获取默认viewName。
- LocaleResolver:用于多语言解析,英语,法语等
- ViewResolver:用于后端动态渲染页面,像velocity三方页面渲染工具
- ThemeResolver:用于动态样式,由后端来决定前端的展示
- HandlerExceptionResolver:异常处理
-
组件配置
每个组件都有默认值。首先从spring容器中获取,如果没有则使用默认值 -
流程
四、 HandlerMapping 流程
- 组件
- HandlerInterceptor:拦截器,在请求到达controller之前处理
- CorsConfiguration:配置跨域请求如何处理
- UrlPathHelper:获取路径,比如请求目录,servletPath等
- PathMatcher:判断获取的路径是否和你设置的正则相匹配
- 组件配置
每个组件都有默认值。可以通过实现WebMvcConfigurer接口来配置 - 流程
五、 HandlerAdapter 流程
- 组件
- HttpMessageConverter:将请求的数据转换为对象,将对象转换为特定格式数据,比如json
- HandlerMethodArgumentResolver:从请求、cookie、session等解析出controller方法需要的参数
- HandlerMethodReturnValueHandler:处理controler的返回值,将值转换为特定格式输出,比如html,json等
- WebDataBinder:将请求数据转换为指定类型数据,并验证
- ModelMap:存储响应数据,主要用于velcoity这种页面渲染
- 组件配置
- HttpMessageConverter,HandlerMethodArgumentResolver,HandlerMethodReturnValueHandler 有默认值。可以通过实现WebMvcConfigurer接口来配置
- WebDataBinder:@ControllerAdvice配合@InitBinder进行全局配置;controller的@InitBinder进行当前controller设置。
- ModelMap:@ControllerAdvice配合@ModelAttribute 进行全局配置;controller的@ModelAttribute进行当前controller设置。
- 流程