天天看點

Spring MVC請求處理流程及源碼分析

       從接受請求到傳回響應,spring MVC架構的衆多元件都伸胳膊挽袖子行動起來,各司其職,有條不紊地完成份内的工作。在整個架構中,DispatcherServlet處于核心的位置,它負責協調群組織不同元件,共同完成請求響應的工作。和大多數Web MVC架構一樣,Spring MVC通過一個前端Servlet處理器接收所有的請求,并将具體工作委托給其它元件進行具體的處理,DispatcherServlet就是 Spring MVC的前端Servlet處理器。下面我們對Spring MVC處理請求的整體過程做一下高空俯瞰:

① 整個過程開始于用戶端發送一個HTTP請求;

② DispatcherServlet接收這個請求後,并将請求的處理工作委托給具體的處理器(Handler),後者負責處理請求執行相應的業務邏輯。在這之前,DispatcherServlet必須能夠憑借請求資訊(URL或請求參數等)按照某種機制找到請求對應的處理器,DispatcherServlet是通過垂詢HandlerMapping完成這一工作的;

③ 當DispatcherServlet從HandlerMapping中得到目前請求對應的處理器後,它就将請求分派給這個處理器。處理器根據請求的資訊執行相應的業務邏輯,一個設計良好的處理器應該通過調用Service層的業務對象完成業務處理,而非自己越俎代庖。

④ 處理器完成業務邏輯的處理後将傳回一個ModelAndView給DispatcherServlet,ModelAndView包含了視圖邏輯名和渲染視圖時需要用到的模型資料對象;

⑤ 由于ModelAndView中包含的是視圖邏輯名,DispatcherServlet必須知道這個邏輯名對應的真實視圖對象,這項視圖解析的工作通過調用ViewResolver來完成;

⑥ 當得到真實的視圖對象後,DispatcherServlet将請求分派給這個View對象,由其完成Model資料的渲染工作;

⑦ 最終用戶端得到傳回的響應,這可能是一個普通的HTML頁面,也可能是一個Excel電子表格、甚至是一個PDF文檔等不一而足的視圖形式,Spring的視圖類型是異常豐富和靈活的。

繼續閱讀