1. 程式人生 > >springmvc原始碼解析之元件介紹

springmvc原始碼解析之元件介紹

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

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的幾大元件及提供的預設實現, 自己也可以根據需