九大基础组件
- MultipartResolver
- LocaleResolver
- ThemeResolver:站点主题样式
- HandlerMapping
- HandlerAdapter
- HandlerExceptionResolver
- RequestToViewNameTranslator:可以在处理器返回的View为空时使用它根据Request获取ViewName
- ViewResolver
- FlashMapManager
MultipartResolver
处理文件上传请求
- CommonsMultipartResolver:使用Commons Fileupload 来处理multipart请求
- StandardServletMultipartResolver:基于Servlet 3.0来处理multipart请求
HandlerMapping
寻找Handler
- PropertySourcedRequestMappingHandlerMapping: springfox group /v2/api-doc
- WebMvcEndpointHandlerMapping:
@Endpoint
@WebEndpoint
@EndpointWebExtension
- ControllerEndpointHandlerMapping:
@ControllerEndpoint
@RestControllerEndpoint
- RequestMappingHandlerMapping:
@RequestMapping
@GetMapping
, etc. - BeanNameUrlHandlerMapping:
<bean id="/test.do" class="xxxController"/>
xxxController implements Controller - RouterFunctionMapping: 自定义函数式端点路由映射
- SimpleUrlHandlerMapping: swagger-ui.html, /webjar/**, 自定义的静态资源处理器映射, etc.
HandlerInterceptor
请求前置,后置处理
- MappedInterceptor: 自定义带模式匹配的拦截器会被包装其中,用以按请求路径匹配要应用的拦截器
- 自定义无模式匹配的拦截器
- ConversionServiceExposingInterceptor: 暴露
ConversionService
,用于在请求处理过程中对请求参数或者返回值进行类型转换 例如: String->LocalDate, etc. - ResourceUrlProviderExposingInterceptor: 暴露
ResourceUrlProvider
,用于静态资源URL版本控制
Handler + HandlerInterceptors = HandlerExecutionChain
HandlerAdapter
调用请求处理器方法
- RequestMappingHandlerAdapter: 处理HandlerMethod(核心) 基于
@RequestMapping
的对应方法处理
该bean中初始化了ControllerAdvice
ModelAttribue
InitBinder
RequestMapping
HandlerMethodArgumentResolver
HandlerMethodReturnValueHandler
RequestBodyAdvice
ResponseBodyAdvice
等类型beans - HandlerFunctionAdapter: 处理
HandlerFunction
基于函数式端点的方法处理 - HttpRequestHandlerAdapter: 处理
HttpRequestHandler
实现
业务自行处理请求,不需要通过ModelAndView
转到视图 - SimpleControllerHandlerAdapter: 处理
Controller
实现
基于标准控制器,返回ModelAndView
- SimpleServletHandlerAdapter: 处理原始Servlet
基于标准的servlet处理
ModelFactory
初始化/更新模型bean
- 合并已知的
@SessionAttribute
属性列表 - 执行
@ModelAttribute
注释的方法并添加 - 查找Handler方法中被
@ModelAttribute
注解标注又在@SessionAttributes
中存在的参数,若模型视图容器中不存在则添加
WebDataBinderFactory
初始化自定义的web数据绑定器,例如:‘2020-01-01’ String-> Date
HandlerMethodArgumentResolver
解析请求参数
- RequestParamMethodArgumentResolver:把请求参数部分的值绑定到指定的方法参数上
- RequestHeaderMethodArgumentResolver:把请求header部分的值绑定到指定的方法参数上
- PathVariableMethodArgumentResolver:绑定请求路径端点上的路径变量
- ModelAttributeMethod
Processor
:模型属性方法处理器,可绑定模型属性参数 - RequestResponseBodyMethod
Processor
:解析用@RequestBody
注释的方法参数、@ResponseBody
注释的方法返回值, 读取请求体时会先应用ResponseBodyAdvice
切面 - RequestPartMethodArgumentResolver:解析用
@RequestPart
注释的方法参数 - … 多达30多种
- 自定义请求参数解析器
HandlerMethodReturnValueHandler
处理Handler方法返回值
- ViewNameMethodReturnValueHandler: 处理字符串类型视图名返回值
- ModelAndViewMethodReturnValueHandler: 处理
ModelAndView
返回值 - ResponseBodyEmitterReturnValueHandler:处理ResponseEntity/ResponseBodyEmitter返回值
- RequestResponseBodyMethod
Processor
: 处理@RequestBody
注释的方法参数、@ResponseBody
注释的方法返回值 - … 多达10多种
- 自定义方法返回值处理器
Processor后缀的,看起来像同时实现了HandlerMethodArgumentResolver和HandlerMethodReturnValueHandler
ParameterNameDiscoverer
解析方法参数名称
- StandardReflectionParameterNameDiscoverer:需开启java8 ‘-parameters’ 编译标志
- LocalVariableTableParameterNameDiscoverer:使用ObjectWeb’s ASM分析字节码中的本地变量表
HttpMessageConverter
- ByteArrayHttpMessageConverter
- StringHttpMessageConverter
- ResourceHttpMessageConverter
- ResourceRegionHttpMessageConverter
- SourceHttpMessageConverter
- AllEncompassingFormHttpMessageConverter
- Jaxb2RootElementHttpMessageConverter
- MappingJackson2HttpMessageConverter
内容协商完毕,确定好要使用的消息转换器,开始转换之前先执行RequestResponseBodyChain切面(自定义
ResponseBodyAdvice
),之后转换,刷出到Servlet OutputStream,准备相应头部
HandlerExceptionResolver
异常处理
- DefaultErrorAttributes: 存储错误相关属性
- HandlerExceptionResolverComposite: 所有自定义异常处理器+
DefaultHandlerExceptionResolver
的组合 - SimpleMappingExceptionResolver:异常类名称和错误视图名称之间的映射
- DefaultHandlerExceptionResolver:解决了Spring MVC引发的异常,并将它们映射到HTTP状态码
- ResponseStatusExceptionResolver:使用
@ResponseStatus
注解解决异常,并根据注解中的值将其映射到HTTP状态码 - ExceptionHandlerExceptionResolver:通过调用
@Controller
或@ControllerAdvice
类中的@ExceptionHandler
方法来解决异常
LocalResolver
语言解析
- FixedLocalResolver:固定的语言信息
- AcceptHeaderLocalResolver: 通过请求头部的语言信息来进行多语言选择
- CookieLocalResolver:将语言信息设置到Cookie中
- SessionLocalResolver:将语言信息放到Session中
ViewResolver
视图解析
- BeanNameViewResolver:将视图解析为spring应用上下文中的bean,其中bean的id与视图名称相同
- UrlBasedViewResolver:直接根据视图的名称解析视图,视图名称会匹配一个物理视图的定义
- ContentNegotiatingViewResolver:通过考虑客户端需要的内容类型来解析视图,委托给一个能够产生对应内容类型的视图解析器
- ThymeleafViewResolver:将视图解析为Thymeleaf模板
- InternalResourceViewResolver:将视图解析为Web应用的内部资源(一般为JSP)
- ResourceBundleViewResolver: 将视图解析为资源bundle(一般为属性文件)