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