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的几大组件及提供的默认实现, 自己也可以根据需求进行扩展

03-06 14:33