從接受請求到返回響應,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的
視圖類型是異常豐富和靈活的。