springmvc原始碼解析之元件介紹
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的幾大元件及提供的預設實現, 自己也可以根據需