具體執(zhí)行步驟如下:
1、? 首先用戶發(fā)送請(qǐng)求————>前端控制器,前端控制器根據(jù)請(qǐng)求信息(如URL)來(lái)決定選擇哪一個(gè)頁(yè)面控制器進(jìn)行處理并把請(qǐng)求委托給它,即以前的控制器的控制邏輯部分;圖中的1、2步驟;
2、? 頁(yè)面控制器接收到請(qǐng)求后,進(jìn)行功能處理,首先需要收集和綁定請(qǐng)求參數(shù)到一個(gè)對(duì)象,這個(gè)對(duì)象在Spring Web MVC中叫命令對(duì)象,并進(jìn)行驗(yàn)證,然后將命令對(duì)象委托給業(yè)務(wù)對(duì)象進(jìn)行處理;處理完畢后返回一個(gè)ModelAndView(模型數(shù)據(jù)和邏輯視圖名);圖中的3、4、5步驟;
3、? 前端控制器收回控制權(quán),然后根據(jù)返回的邏輯視圖名,選擇相應(yīng)的視圖進(jìn)行渲染,并把模型數(shù)據(jù)傳入以便視圖渲染;圖中的步驟6、7;
4、? 前端控制器再次收回控制權(quán),將響應(yīng)返回給用戶,圖中的步驟8;至此整個(gè)結(jié)束。
Spring的MVC框架主要由DispatcherServlet、處理器映射、處理器(控制器)、視圖解析器、視圖組成。
處理器映射:選擇使用哪個(gè)控制器來(lái)處理請(qǐng)求
視圖解析器:選擇結(jié)果應(yīng)該如何渲染
SpringMVC運(yùn)行原理
(1) Http請(qǐng)求:客戶端請(qǐng)求提交到DispatcherServlet。
(2) 尋找處理器:由DispatcherServlet控制器查詢一個(gè)或多個(gè)HandlerMapping,找到處理請(qǐng)求的Controller。
(3) 調(diào)用處理器:DispatcherServlet將請(qǐng)求提交到Controller。
(4)(5)調(diào)用業(yè)務(wù)處理和返回結(jié)果:Controller調(diào)用業(yè)務(wù)邏輯處理后,返回ModelAndView。
(6)(7)處理視圖映射并返回模型: DispatcherServlet查詢一個(gè)或多個(gè)ViewResoler視圖解析器,找到ModelAndView指定的視圖。
(8) Http響應(yīng):視圖負(fù)責(zé)將結(jié)果顯示到客戶端。
SpringMVC接口解釋
· DispatcherServlet接口:
Spring提供的前端控制器,所有的請(qǐng)求都有經(jīng)過(guò)它來(lái)統(tǒng)一分發(fā)。在DispatcherServlet將請(qǐng)求分發(fā)給Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具體的Controller。
·?HandlerMapping接口:?
能夠完成客戶請(qǐng)求到Controller映射。
·?Controller接口:
? ? ? 需要為并發(fā)用戶處理上述請(qǐng)求,因此實(shí)現(xiàn)Controller接口時(shí),必須保證線程安全并且可重用。Controller將處理用戶請(qǐng)求,這和Struts Action扮演的角色是一致的。一旦Controller處理完用戶請(qǐng)求,則返回ModelAndView對(duì)象給DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和視圖(View)。
? ? ? 從宏觀角度考慮,DispatcherServlet是整個(gè)Web應(yīng)用的控制器;從微觀考慮,Controller是單個(gè)Http請(qǐng)求處理過(guò)程中的控制器,而ModelAndView是Http請(qǐng)求過(guò)程中返回的模型(Model)和視圖(View)。
·?ViewResolver接口:
Spring提供的視圖解析器(ViewResolver)在Web應(yīng)用中查找View對(duì)象,從而將相應(yīng)結(jié)果渲染給客戶。
DispatcherServlet是整個(gè)Spring MVC的核心。它負(fù)責(zé)接收HTTP請(qǐng)求組織協(xié)調(diào)Spring MVC的各個(gè)組成部分。其主要工作有以下三項(xiàng):
1、截獲符合特定格式的URL請(qǐng)求。
2、初始化DispatcherServlet上下文對(duì)應(yīng)的WebApplicationContext,并將其與業(yè)務(wù)層、持久化層的WebApplicationContext建立關(guān)聯(lián)。
3、初始化Spring MVC的各個(gè)組成組件,并裝配到DispatcherServlet中。