Spring MVC 的請求追蹤及原理推導

我們可以根據請求的運動來推導SpringMVC的運行原理。
SpringMVC主要的組成部分是DispatcherServlet、處理器映射(HandlerMapping)、處理器(Controller)、視圖解析器(ViewResolver)、視圖(View)。
DispatcherServlet就是一個Servlet ,它是一個前端控制器,在SpringMVC 中的主要工作是:
①截獲符合特定格式的URL的Request,將請求發送給Controller;
②初始化DispatcherServlet上下文對應的WebApplicationContext,並將其與業務層、持久化層的WebApplicationContext建立關聯。;
③初始化Spring MVC的各個組成組件,並裝配到DispatcherServlet中。
接下來看看Request在SpringMVC上時怎麼走的:
哈哈哈
Request會由DispatcherServlet分配給控制器(根據處理器映射來確定),在控制器完成處理後,接着Request會被髮送到一個視圖(根據視圖解析器來確定)來呈現輸出結果。

  1. Request去服務器時,會帶有用戶所請求內容的相關信息,至少會有包含請求的URL;
  2. DispatcherServlet 查詢HandlerMapping來確定將Request發送給哪個Controller處理;
  3. 選定了合適的Controller,DispatcherServlet會將Request發送過去,等待Controller對請求的處理(設計良好的Controller本身只處理很少或者不處理,而是將業務邏輯委託給一個或多個服務對象)。
  4. Controller在完成邏輯處理後,會產生一些信息,需要返回給用戶並且要在瀏覽器上顯示的。這些信息稱爲模型(Model) ,而這些信息的加工格式化者就是HTML,信息需要發送一個視圖(通常是JSP)。
  5. Controller所做的最後一件事就是將模型數據打包,並且標出用於渲染輸出的視圖名稱,發還給DispatcherServlet.
  6. ViewResolver根據DispatcherServlet的邏輯名查找真正的視圖。
  7. 視圖將數據渲染輸出,並且通過這個輸出將響應對象傳遞給客戶端。

這樣的話,Controller就不會與特定的View耦合,傳遞給DispatcherServlet的視圖名稱並不表示某個特定的JSP。實際上 ,它甚至根本不能確定視圖就是JSP,它只是傳遞了一個邏輯名,這個名稱會用來查找產生結果的真正視圖。
Request在DispatcherServlet知道是由哪個視圖來渲染結果就已經完成任務了。

總結:SpringMVC的運行原理

  1. 客戶端請求提交到DispatcherServlet;
  2. 由DispatcherServlet控制器查詢一個或多個HandlerMapping,找到處理請求的Controller;
  3. DispatcherServlet將請求提交到Controller,Controller調用業務邏輯處理後,返回ModelAndView;
  4. DispatcherServlet查詢一個或多個ViewResoler視圖解析器,找到ModelAndView指定的視圖;
  5. 視圖將數據結果渲染輸出到客戶端。

最後推薦一個很好博客–實例詳解Spring MVC入門使用

發佈了33 篇原創文章 · 獲贊 27 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章