Spring MVC是一種基於Web MVC設計模式的請求驅動類型的輕量級Web框架,即使用了MVC架構模式的思想,將Web層進行職責解耦,基於請求驅動指的就是使用"請求-響應"模型,框架的目的就是幫助我們簡化開發。Spring MVC在Web應用中充當控制層(Controller)的角色,對請求進行分發處理。Spring請求流程如下所示
具體步驟
- 首先用戶發送請求到前端控制器,前端控制器根據請求信息(如 URL)來決定選擇哪一個頁面控制器進行處理並把請求委托給它,即以前的控制器的控制邏輯部分,即圖中的 1、2 步驟。
- 頁面控制器接收到請求后,進行功能處理,首先需要收集和綁定請求參數到一個對象,這個對象在 Spring Web MVC 中叫命令對象,並進行驗證,然后將命令對象委托給業務對象進行處理,處理完畢后返回一個 ModelAndView(模型數據和邏輯視圖名),即圖中的 3、4、5 步驟。
- 前端控制器收回控制權,然后根據返回的邏輯視圖名,選擇相應的視圖進行渲染,並把模型數據傳入以便視圖渲染,即圖中的步驟 6、7;
- 前端控制器再次收回控制權,將響應返回給用戶,圖中的步驟 8,至此整個結束。
核心流程
具體步驟
1、發起請求到前端控制器(DispatcherServlet)
2、前端控制器請求HandlerMapping查找 Handler(可以根據xml配置、注解進行查找)
3、處理器映射器HandlerMapping向前端控制器返回Handler,HandlerMapping會把請求映射為HandlerExecutionChain對象(包含一個Handler處理器(頁面控制器)對象,多個HandlerInterceptor攔截器對象),通過這種策略模式,很容易添加新的映射策略
4、前端控制器調用處理器適配器去執行Handler
5、處理器適配器HandlerAdapter將會根據適配的結果去執行Handler
6、Handler執行完成給適配器返回ModelAndView
7、處理器適配器向前端控制器返回ModelAndView (ModelAndView是SpringMVC框架的一個底層對象,包括 Model和view)
8、前端控制器請求視圖解析器去進行視圖解析 (根據邏輯視圖名解析成真正的視jsp),通過這種策略很容易更換其他視圖技術,只需要更改視圖解析器即可
9、視圖解析器向前端控制器返回View
10、前端控制器進行視圖渲染 (視圖渲染將模型數據(在ModelAndView對象中)填充到request域)
11、前端控制器向用戶響應結果
組件介紹
下面對出現的一些組件進行詳細的介紹:
(1) 前端控制器DispatcherServlet。
作用:接收請求,響應結果,相當於轉發器,中央處理器。有了DispatcherServlet減少了其它組件之間的耦合度。
(2) 處理器映射器HandlerMapping。
作用:根據請求的url查找Handler。
(3) 處理器適配器HandlerAdapter。
作用:按照特定規則(HandlerAdapter要求的規則)去執行Handler。
(4) 處理器Handler。
注意:編寫Handler時按照HandlerAdapter的要求去做,這樣適配器才可以去正確執行Handler
(5) 視圖解析器ViewResolver。
作用:進行視圖解析,根據邏輯視圖名解析成真正的視圖(view)
(6) 視圖View。
注意:View是一個接口,實現類支持不同的View類型(jsp、freemarker、pdf…)
總結:需要我們開發的工作只有處理器 Handler 的編寫以及視圖比如JSP頁面的編寫。
-