SpringMVC執行流程---個人理解
阿新 • • 發佈:2018-12-13
- 使用者向伺服器傳送請求,請求被SpringMvc的前端控制器DispatcherServlet攔截;
- DispatcherServlet對請求的URL(統一資源定位符)進行解析,得到URI(請求資源識別符號)然後根據URI,呼叫HandlerMapping獲得Handler配置的所有相關物件,包括Handler物件以及Handler物件對應的攔截器,這些物件都會封裝到一個HandlerExecutionChain物件當中返回;
- DispatcherServlet根據獲取的Handler,選擇一個合適的HandlerAdapter.HandlerAdapter的設計,符合面向物件的單一職責原則,程式碼結構清晰,便於維護,最為重要的是,帶你媽的可複用性高,HandlerAdapter會被用於處理多種Handler,呼叫Handler實際處理請求的方法;
- 提取請求中的模型資料,開始執行Handler(Controller).在填充Handler的入參過程中,根據配置,spring將幫助做一些額外的工作: 訊息轉換:將請求訊息,如json/xml等資料轉換成一個物件,將物件展緩為指定的響應資訊; 資料轉換:對請求資訊進行資料轉換,如string轉換成integer,double等; 資料格式換:對請求的資訊進行資料格式轉換,如將字串轉換為格式化數字和格式化日期; 資料驗證:驗證資料的有效性,比如長度/格式等,驗證結果儲存到BindingResult或者ERROR中;
- Handler執行完成後,向DispatcherServlet返回一個ModelAndView物件,ModelAndView物件中包含檢視或檢視模型;
- 根據返回的ModelAndView物件,選擇一個合適的ViewResolver(檢視解析器)返回給DispatcherServlet;
- ViewResolver結合Model和View來渲染檢視;
- 將檢視渲染結果返回給客戶端。 以上八個步驟,DispatcherServlet/HandlerMapping/HandlerAdapter/ViewResolver等物件協同完成工作,完成SpringMVC請求–>響應的整個工作流程,這些物件完成的工作對於開發者而言都是不可見的,開發者不需要關心這些物件是如何完成工作的,開發者只需要在Handler(Controller)當中完成對請求的業務處理.