Spring MVC請求的處理過程
請求會由DispatcherServlet分配給控制器(根據處理器映射來確定)。在控制器完成處理後,接著請求會被發送給一個視圖(根據視圖解析器來確定)來呈現輸出結果:
(1)第一步是 Spring的DispatcherServlet。Spring MVC的所有請求都會通過一個前端控制器Servlet —— DispatcherServlet;DispatcherServlet的任務是將請求發送給Spring MVC控制器; (2)控制器是一個用於處理請求的Spring組件;DispatcherServlet會查詢一個多個處理器映射HandlerMapping來確定請求應該發送給哪個控制器Handler;HandlerMapping根據請求所攜帶的URL資訊來進行決策; (3)選中了控制器Handler之後,DispatcherServlet會將請求發送給選中的Handler;到達了Handler,請求會等待Handler處理請求中的資訊(實際上,Handler本身只處理很少的處理工作,而是將商務邏輯委託給一個或多個服務物件); (4)Handler在完成邏輯處理後,會產生一些資訊Model,這些資訊需要返回給使用者並在瀏覽器上顯示;Handler所做的最後一件事是將Modle資料打包,並且標識出用於渲染輸出的視圖View的名稱。並將請求連同Model和View名稱發送回DispatcherServlet; (5)傳遞給DispatcherServlet的View的名稱並不直接表示某個特定的JSP;它僅僅傳遞了一個邏輯的視圖名,這個名字將會用來尋找產生結果的真正視圖。DispatcherServlet將會使用ViewResolver來將邏輯視圖名匹配為一個特定的View實現,可能也可能不是JSP; (6)最後是將Model資料交付給View,View使用Model資料渲染輸出,並通過這個輸出將響應對象傳遞給用戶端;
Spring MVC簡介
M - Model map會被自動轉換成合適的格式,如JSP中的request attributes, Velocity中的template model。
在其他MVC架構中整合Spring
通過配置ContextLoaderListener啟動一個Spring root application context, 然後通過ServletContext擷取這個spring context:
WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(request.getServletContext());