spring web mvc 核心處理流程
官方文件
https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-servlet
作用
spring mvc 核心處理器DispatcherServelt.java.其將接收到的請求分發給特殊的處理器處理再將得到的結果傳送給檢視解析器,解析的結果返回給前端
核心流程圖
1.客戶端請求到達DispatcherServlet的doService方法,doService 先做一些前置環境準備。再將修飾過的request請求給doDispatch方法具體處理。
2.請求到達doDispatch,判斷請求是否是mutipart ,若是則將request轉換成複雜request 請求。
3.根據當前的請求,將請求對映到對應的攔截器列表(列表稱為處理器鏈)。[處理器鏈包含前置處理,環繞處理和後置處理方法.]
[總共五種處理器鏈 常用的兩種 RequestMappingHandlerMapping(支援@RequestMapping 註解)
]SimpleUrlHandlerMapping
支援處理URI模式的請求
並且找到對應的業務處理的bean(取名為handler)實際就是某個controller
4.根據查詢到的handler找到對應介面卡。介面卡的作用:將具體的業務方法的處理打包給介面卡,比如註釋處理。讓其內部呼叫業務方法,不給Dispatcher帶來更多額外的細節處理。【介面卡有四種:RequestMappingHandlerAdapter,HandlerFunctionAdapter,HttpRequestHandlerAdapter,SimpleControllerAdapterHandler】
5. 呼叫過濾器鏈(handlerChain) 的前置處理方法。當前鏈中的攔截器列表以壓棧的方式依次呼叫前置方法,當校驗不通過的時候則返回false,此時請求中斷退出。
6.介面卡對業務方法進行呼叫(核心處理方法)。返回一個檢視物件
6.1 建立一個controller例項生成工廠。WebDataBinderFactory
6.2 建立資料模型繫結工廠,這個工廠是針對於@ModelAttribute 註解。ModelFactory
6.3 建立處理返回值方法。
6.4 通過反射的方式呼叫業務方法
6.5 返回一個檢視物件
7.在業務方法返回結果之後呼叫處理器鏈 的applyPostHandle(方法)以出棧的方式順序,執行對應的操作。
8.處理最終的結果,呼叫最終的處理器鏈的後置方法(triggerAfterCompletion)
重要類名解釋
HandlerMapping 處理器對映器:對映一個請求到對應業務類的方法。並且執行預處理和後置處理。
HandlerAdapter 處理器介面卡:根據業務處理方法對映到對應的adapter, adapter 呼叫handle方法執行具體的業務邏輯。