springmvc源码解析之组件介绍
天河 天河聊架构 今天
说在前面
前面介绍了spring的源码解析,webmvc框架springmvc也是比较流行的,也是mvc的经典设计实现,本次开始介绍springmvc的源码解析,更多中间件源码解析相关文章请关注“天河聊技术”微信公众号或加“天河”微信,进入技术交流微信群。
springmvc组件介绍
01 DispatcherServlet
springmvc请求处理器,所有的springmvc请求都会先被这个servlet接受,根据@RequestMapping配置的url映射找到具体的handlerMapping、handlerAdapter组件进行请求参数解析、业务方法处理、响应参数解析,最后通过视图解析器生成视图渲染视图。
02 Controller
ServletForwardingController 可以支持servlet转发的控制器
ParameterizableViewController 可以返回配置属性视图解析的控制器
UrlFilenameViewController 将虚拟的url转换成视图的控制器,可以添加视图的前缀和后缀
ServletWrappingController 包装了内部管理servlet实例的控制器
03 HandlerMapping
用来根据url映射匹配到具体的业务handler来出来业务请求,不管是基本简单的url映射SimpleUrlHandlerMapping,还是基于beanName的url映射BeanNameUrlHandlerMapping,还是基于@requestMapping注解的url映射,DefaultAnnotationHandlerMapping、RequestMappingHandlerMapping
04 HttpRequestHandler
ResourceHttpRequestHandler 直接请求资源的
DefaultServletHttpRequestHandler 默认servlet请求,直接执行转发操作
WebSocketHttpRequestHandler websocket支持
SockJsHttpRequestHandler socketJs支持
HessianServiceExporter hessian代理支持
05 HandlerMethodReturnValueHandler
以处理从处理程序方法的调用返回的值
ViewNameMethodReturnValueHandler 处理类型void的返回值,并将其解释为视图名称引用的字符串
ViewMethodReturnValueHandler 处理视图类型的返回值
StreamingResponseBodyReturnValueHandler 支持StreamingResponseBody的返回值
HttpHeadersReturnValueHandler 支持httpHeaders的返回值
ModelAndViewMethodReturnValueHandler 处理ModelAndView类型的返回值,将视图和模型信息复制到ModelAndViewContainer
ModelAndViewResolverMethodReturnValueHandler 返回值可以用ModelAndViewResolver处理
RequestResponseBodyMethodProcessor 解析用@RequestBody注释的方法参数,并通过使用HttpMessageConverter读写请求或响应的主体来处理用@ResponseBody注释的方法的返回值
HttpEntityMethodProcessor 解析HttpEntity和RequestEntity方法参数值,并处理HttpEntity和ResponseEntity返回值
ModelMethodProcessor 解析模型参数并处理模型返回值
ServletModelAttributeMethodProcessor 一种特定于servlet的ModelAttributeMethodProcessor
ListenableFutureReturnValueHandler 支持ListenableFuture类型返回值
HandlerMethodReturnValueHandlerComposite 通过委托给已注册HandlerMethodReturnValueHandlers的列表来处理方法返回值
DeferredResultMethodReturnValueHandler 类型DeferredResult、ListenableFuture、CompletionStage和任何其他已注册适配器的异步类型的返回值的处理程序
CallableMethodReturnValueHandler 支持Callable类型的返回值
CompletionStageReturnValueHandler 支持CompletionStage类型返回值
ResponseBodyEmitterReturnValueHandler ResponseBodyEmitter类型(以及ResponseEntity<ResponseBodyEmitter>子类)的返回值的处理程序,以及具有注册适配器的任何其他异步类型的处理程序
AsyncTaskMethodReturnValueHandler 支持WebAsyncTask类型返回值
05 HandlerAdapter
用来辅助处理业务handler的适配器类,不同类型的请求参数解析、不同类型的响应参数解析、生成不同响应类型的视图,原生的servlet支持SimpleServletHandlerAdapter,springmvc封装的requestHandler适配器 HttpRequestHandlerAdapter,基于@RequestMapping注解的requestHandler适配器 AnnotationMethodHandlerAdapter、RequestMappingHandlerAdapter,基于实现Controller接口的requestHandler适配器SimpleControllerHandlerAdapter
06 HandlerMethodArgumentResolver
servlet请求响应参数解析器
PathVariableMapMethodArgumentResolver 基于@PathVariable注解
RequestHeaderMethodArgumentResolver 基于@RequestHeader注解
RequestAttributeMethodArgumentResolver 基于@RequestAttribute注解
RequestParamMethodArgumentResolver 基于@RequestParam注解
ServletCookieValueMethodArgumentResolver 基于cookie解析
SessionAttributeMethodArgumentResolver 基于@SessionAttribute注解
ExpressionValueMethodArgumentResolver 基于@Value注解
MatrixVariableMethodArgumentResolver 基于@MatrixVariable注解
ServletModelAttributeMethodProcessor 基于springmvc的model中绑定的参数解析
ServletResponseMethodArgumentResolver 基于servlet响应参数解析
RequestPartMethodArgumentResolver 基于@RequestPart注解
RequestResponseBodyMethodProcessor 基于@RequestBody、@ResponseBody注解
HttpEntityMethodProcessor 基于httpEntity和responseEntity解析
HandlerMethodArgumentResolverComposite 组合参数解析器
RedirectAttributesMethodArgumentResolver 重定向绑定参数解析器
参数解析器比较多,这里只介绍了经常使用的。
07 HandlerInterceptor
MappedInterceptor 路径匹配拦截器
AsyncHandlerInterceptor 异步请求处理拦截器
ConversionServiceExposingInterceptor 类型转换服务拦截器
WebContentInterceptor 检查请求并准备响应的处理程序拦截器
08 HttpMessageConverter
AllEncompassingFormHttpMessageConverter 支持xml和json的类型转换器
SourceHttpMessageConverter 可以读写resource的类型转换器
ResourceHttpMessageConverter 它可以读写资源并支持字节范围请求
ByteArrayHttpMessageConverter 它可以读写字节数组
AbstractJaxb2HttpMessageConverter 抽象基于JAXB2类型转换器
MarshallingHttpMessageConverter 基于marshaller的类型转换器
ObjectToStringHttpMessageConverter 使用ConversionService将字符串内容转换为目标对象类型或从目标对象类型转换为目标对象类型
AbstractJackson2HttpMessageConverter 基于Jackson和内容类型独立的HttpMessageConverter实现的抽象基类
MappingJackson2HttpMessageConverter 它可以使用Jackson 2读写JSON
MappingJackson2XmlHttpMessageConverter 它可以使用Jackson 2读写XML
GsonHttpMessageConverter 它可以使用谷歌Gson库的Gson类读写JSON
ProtobufHttpMessageConverter 支持Protobuf协议的类型转换器
StringHttpMessageConverter 可以读写字符串的HttpMessageConverter的实现
BufferedImageHttpMessageConverter HttpMessageConverter的实现,它可以读写缓冲edimages
Jaxb2CollectionHttpMessageConverter 可以使用JAXB2读取XML集合的HttpMessageConverter
09 View
视图组件
MappingJackson2JsonView 通过使用Jackson 2的ObjectMapper序列化当前请求的模型来呈现JSON内容
MappingJackson2XmlView 通过使用Jackson 2的XmlMapper序列化当前请求的模型来呈现XML内容
MarshallingView 允许响应上下文作为Marshaller编解码的结果呈现的Spring-MVC视图,将编解码的对象作为模型中的参数提供
AbstractPdfView PDF视图的抽象超类
FreeMarkerView 基于FreeMarker模板的视图
JstlView 即使用JSP标准标记库的JSP页面解析jstl属性的视图
AbstractXlsxView XLSX格式中Excel文档视图的方便超类
RedirectView 重定向到绝对URL、上下文相对URL或当前请求相对URL的视图
10 ViewResolver
视图解析器
ViewResolverComposite 组合视图解析器
XmlViewResolver 它使用专用XML文件中的bean定义作为视图定义
UrlBasedViewResolver 基于简单url的视图解析
InternalResourceViewResolver UrlBasedViewResolver的方便子类,它支持InternalResourceView(即servlet和jsp)和JstlView等子类
ContentNegotiatingViewResolver 它基于请求文件名或Accept头解析视图
BeanNameViewResolver 它在当前应用程序上下文中将视图名解释为bean名
11 ModelAndView
用于web MVC框架中的模型和视图,这个类只包含这两个属性,使控制器能够在一个返回值中同时返回模型和视图。表示处理程序返回的要由DispatcherServlet解析的模型和视图。视图可以采用字符串视图名称的形式,该名称需要由ViewResolver对象解析;或者可以直接指定视图对象。
说在最后
本次主要介绍了springmvc的几大组件及提供的默认实现, 自己也可以根据需求进行扩展