javascript
SpringMVC框架
一、SpringMVC工作流程圖
?
- DispatcherServlet:Spring提供的前端控制器,所有的請求都有經過它來統一分發。在DispatcherServlet將請求分發給Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具體的Controller。[作用:接收請求,響應結果,相當于轉發器,中央處理器]
- HandlerMapping:能夠完成客戶請求到Controller映射。[作用:根據請求的url查找Handler]
- Controller:需要為并發用戶處理上述請求,因此實現Controller接口時,必須保證線程安全并且可重用。Controller將處理用戶請求,這和Struts Action扮演的角色是一致的。一旦Controller處理完用戶請求,則返回ModelAndView對象給DispatcherServlet前端控制器,ModelAndView中包含了模型(Model)和視圖(View)。從宏觀角度考慮,DispatcherServlet是整個Web應用的控制器;從微觀考慮,Controller是單個Http請求處理過程中的控制器,而ModelAndView是Http請求過程中返回的模型(Model)和視圖(View)。
- ViewResolver:Spring提供的視圖解析器(ViewResolver)在Web應用中查找View對象,從而將相應結果渲染給客戶。
運行原理:
1、客戶端發出一個http請求給web服務器,web服務器對http請求進行解析,如果匹配DispatcherServlet的請求映射路徑(在web.xml中指定),web容器將請求轉交給DispatcherServlet;
2、DipatcherServlet接收到這個請求之后將根據請求的信息(包括URL、Http方法、請求報文頭和請求參數Cookie等)以及HandlerMapping的配置找到處理請求的處理器(Handler)
3-4、DispatcherServlet根據HandlerMapping找到對應的Handler,將處理權交給Handler(Handler將具體的處理進行封裝),再由具體的HandlerAdapter對Handler進行具體的調用【匹配@Controller + @RequsetMapping注釋,Controller一般封裝了具體的業務處理邏輯,類似于Struts2中的Action】;
5、Handler對數據處理完成以后將返回一個ModelAndView()對象給DispatcherServlet;
6、Handler返回的ModelAndView()只是一個邏輯視圖并不是一個正式的視圖,DispatcherSevlet通過ViewResolver將邏輯視圖轉化為真正的視圖View;
7、Dispatcher通過model解析出ModelAndView()中的參數進行解析最終展現出完整的view并返回給客戶端。
????? 在Spring3.0中定義一個控制器類,這個類必須標有@Controller注解。當有@Controller注解的控制器收到一個請求時,它會尋找一個合適的handler方法去處理這個請求。這就需要控制器通過一個或多個handler映射去把每個請求映射到handler方法。為了這樣做,一個控制器類的方法需要被@RequestMapping注解裝飾,使它們成為handler方法。
????? handler方法處理完請求后,它把控制權委托給視圖名與handler方法返回值相同的視圖。為了提供一個靈活的方法,一個handler方法的返回值并不代表一個視圖的實現而是一個邏輯視圖,即沒有任何文件擴展名。你可以將這些邏輯視圖映射到正確的實現,并將這些實現寫入到上下文文件,這樣你就可以輕松的更改視圖層代碼甚至不用修改請求handler類的代碼。 為一個邏輯名稱匹配正確的文件是視圖解析器的責任。一旦控制器類已將一個視圖名稱解析到一個視圖實現。它會根據視圖實現的設計來渲染對應對象。
?二、工作流程
Spring工作流程描述 ? ? ??1. 用戶向服務器發送請求,請求被Spring 前端控制Servelt DispatcherServlet捕獲; ? ? ??2.?DispatcherServlet對請求URL進行解析,得到請求資源標識符(URI)。然后根據該URI,調用HandlerMapping獲得該Handler配置的所有相關的對象(包括Handler對象以及Handler對象對應的攔截器),最后以HandlerExecutionChain對象的形式返回; ? ??? 3.?DispatcherServlet 根據獲得的Handler,選擇一個合適的HandlerAdapter。(附注:如果成功獲得HandlerAdapter后,此時將開始執行攔截器的preHandler(...)方法) ? ? ???4. ?提取Request中的模型數據,填充Handler入參,開始執行Handler(Controller)。 在填充Handler的入參過程中,根據你的配置,Spring將幫你做一些額外的工作: ? ? ??HttpMessageConveter: 將請求消息(如Json、xml等數據)轉換成一個對象,將對象轉換為指定的響應信息 ? ? ??數據轉換:對請求消息進行數據轉換。如String轉換成Integer、Double等 ? ? ??數據根式化:對請求消息進行數據格式化。 如將字符串轉換成格式化數字或格式化日期等 ? ? ??數據驗證: 驗證數據的有效性(長度、格式等),驗證結果存儲到BindingResult或Error中 ? ??? 5. ?Handler執行完成后,向DispatcherServlet?返回一個ModelAndView對象; ? ??? 6. ?根據返回的ModelAndView,選擇一個適合的ViewResolver(必須是已經注冊到Spring容器中的ViewResolver)返回給DispatcherServlet?; ? ??? 7.?ViewResolver 結合Model和View,來渲染視圖 ? ? ? 8. 將渲染結果返回給客戶端。?轉載于:https://www.cnblogs.com/moonandstar08/p/4989946.html
總結
以上是生活随笔為你收集整理的SpringMVC框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 激活设备管理器
- 下一篇: php源码编译常见错误解决方案大全