springmvc源碼解析之組件介紹

springmvc源碼解析之組件介紹

天河 天河聊架構 今天web

 

說在前面spring

前面介紹了spring的源碼解析,webmvc框架springmvc也是比較流行的,也是mvc的經典設計實現,本次開始介紹springmvc的源碼解析,更多中間件源碼解析相關文章請關注「天河聊技術」微信公衆號或加「天河」微信,進入技術交流微信羣。json

 

springmvc組件介紹數組

01 DispatcherServlet微信

springmvc請求處理器,全部的springmvc請求都會先被這個servlet接受,根據@RequestMapping配置的url映射找到具體的handlerMapping、handlerAdapter組件進行請求參數解析、業務方法處理、響應參數解析,最後經過視圖解析器生成視圖渲染視圖。websocket

 

02 Controllercookie

ServletForwardingController 能夠支持servlet轉發的控制器架構

ParameterizableViewController 能夠返回配置屬性視圖解析的控制器mvc

UrlFilenameViewController 將虛擬的url轉換成視圖的控制器,能夠添加視圖的前綴和後綴app

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的幾大組件及提供的默認實現, 本身也能夠根據需求進行擴展

相關文章
相關標籤/搜索