javascript
SpringMVC原理
Spring MVC的功能組件
Spring通過一系列組件實(shí)現(xiàn)功能,這些組件包括DispatcherServlet(前端控制器)、HandlerMapping(處理器映射器)Handler(處理器)、HandlAdapter(處理器適配器)、ViewResolver(視圖解析器)等。
前端控制器負(fù)責(zé)攔截客戶端請求并分發(fā)給其他組件,它是整個(gè)流程控制的中心,負(fù)責(zé)調(diào)度其他組件的執(zhí)行,降低各組件之間的耦合,提升整體效率。前端控制器由框架提供,在程序運(yùn)行過程中自動實(shí)現(xiàn)功能。
處理器映射器負(fù)責(zé)根據(jù)客戶端請求的URL尋找處理器,Spring MVC中提供了配置文件、注解等映射方式,這些映射方式將由相應(yīng)的處理器映射器負(fù)責(zé)處理。處理器映射器由框架提供,在程序運(yùn)行過程中自動實(shí)現(xiàn)功能。
處理器負(fù)責(zé)對客戶端的請求進(jìn)行處理,由于處理請求涉及到具體的業(yè)務(wù)邏輯,因此,開發(fā)者需要在處理器中編寫處理業(yè)務(wù)邏輯的代碼。
處理器適配器負(fù)責(zé)根據(jù)特定的規(guī)則對處理器進(jìn)行執(zhí)行,它可以執(zhí)行多種類型的處理器,是設(shè)計(jì)模式中適配器模式的具體應(yīng)用。處理器適配器由框架提供,在程序運(yùn)行過程中自動實(shí)現(xiàn)功能。
視圖解析器負(fù)責(zé)視圖解析,它可以將處理結(jié)果生成View(視圖)并展示給用戶。視圖解析器由框架提供,在程序運(yùn)行過程中自動實(shí)現(xiàn)功能,但是View需要由開發(fā)者根據(jù)具體需求編寫。
springmvc 框架提供了很多的 View 視圖類型的支持,包括:jstlView、freemarkerView、pdfView 等。 一般情況下需要通過頁面標(biāo)簽或頁面模版技術(shù)將模型數(shù)據(jù)通過頁面展示給用戶,需要由程序員根據(jù)業(yè)務(wù)需求開發(fā)具體的頁面。
說明:在 springmvc 的各個(gè)組件中,處理器映射器、處理器適配器、視圖解析器稱為 springmvc 的三大組件。 需要用戶開發(fā)的組件有 handler、 view
Spring MVC的功能流程
- Spring MVC的工作流程主要圍繞DispatcherServlet(前端控制器)展開,前端控制器負(fù)責(zé)攔截客戶端發(fā)送的請求并將它分發(fā)給對應(yīng)的處理器處理。因此,前端控制器是Spring MVC整個(gè)流程控制的中心。
- Spring MVC的工作流程,如圖所示。
- 圖中展示了Spring MVC從接收請求到響應(yīng)的工作流程。在運(yùn)行過程中,Spring MVC框架的眾多組件協(xié)同工作,各司其職,共同支撐了Spring MVC框架的功能。通常情況下,Spring MVC在處理客戶端請求時(shí)要完成以下步驟。
- 以上7個(gè)步驟是Spring MVC在處理客戶端請求時(shí)的基本流程,這些步驟中的大部分是Spring MVC自動完成的。由于Handler需要處理具體業(yè)務(wù)邏輯,View需要向用戶展示頁面,因此,開發(fā)者只需編寫與Handler和View相關(guān)的內(nèi)容。
中心控制器
-
Spring的web框架圍繞DispatcherServlet設(shè)計(jì)。 DispatcherServlet的作用是將請求分發(fā)到不同的處理器。從Spring 2.5開始,使用Java 5或者以上版本的用戶可以采用基于注解的controller聲明方式。
-
Spring MVC框架像許多其他MVC框架一樣, 以請求為驅(qū)動 , 圍繞一個(gè)中心Servlet分派請求及提供其他功能,DispatcherServlet是一個(gè)實(shí)際的Servlet (它繼承自HttpServlet 基類)。
SpringMVC執(zhí)行原理
當(dāng)發(fā)起請求時(shí)被前置的控制器攔截到請求,根據(jù)請求參數(shù)生成代理請求,找到請求對應(yīng)的實(shí)際控制器,控制器處理請求,創(chuàng)建數(shù)據(jù)模型,訪問數(shù)據(jù)庫,將模型響應(yīng)給中心控制器,控制器使用模型與視圖渲染視圖結(jié)果,將結(jié)果返回給中心控制器,再將結(jié)果返回給請求者。
圖為SpringMVC的一個(gè)較完整的流程圖,實(shí)線表示SpringMVC框架提供的技術(shù),不需要開發(fā)者實(shí)現(xiàn),虛線表示需要開發(fā)者實(shí)現(xiàn)。
簡要分析執(zhí)行流程
我們假設(shè)請求的url為 : http://localhost:8080/SpringMVC/hello
如上url拆分成三部分:
http://localhost:8080 服務(wù)器域名
SpringMVC 部署在服務(wù)器上的web站點(diǎn)
hello 表示控制器
通過分析,如上url表示為:請求位于服務(wù)器localhost:8080上的SpringMVC站點(diǎn)的hello控制器。
1.客戶端請求提交到DispatcherServlet;
2.由DispatcherServlet控制器尋找一個(gè)或多個(gè)HandlerMapping,找到處理請求的Controller;
3.DispatcherServlet將請求提交到Controller;
4.Controller調(diào)用業(yè)務(wù)邏輯處理后,返回ModelAndView;
5.DispatcherServlet尋找一個(gè)或多個(gè)ViewResoler視圖解析器,找到ModelAndView指定的視圖;
6.視圖負(fù)責(zé)將結(jié)果顯示到客戶端。
1、 用戶發(fā)送請求至前端控制器DispatcherServlet。
2、 DispatcherServlet收到請求調(diào)用HandlerMapping處理器映射器。
3、 處理器映射器找到具體的處理器(可以根據(jù)xml配置、注解進(jìn)行查找),生成處理器對象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet。
4、 DispatcherServlet調(diào)用HandlerAdapter處理器適配器。
5、 HandlerAdapter經(jīng)過適配調(diào)用具體的處理器(Controller,也叫后端控制器)。
6、 Controller執(zhí)行完成返回ModelAndView。
7、 HandlerAdapter將controller執(zhí)行結(jié)果ModelAndView返回給DispatcherServlet。
8、 DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器。
9、 ViewReslover解析后返回具體View。
10、DispatcherServlet根據(jù)View進(jìn)行渲染視圖(即將模型數(shù)據(jù)填充至視圖中)。
11、 DispatcherServlet響應(yīng)用戶。
參考鏈接
總結(jié)
以上是生活随笔為你收集整理的SpringMVC原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu 安装Qt以及配置
- 下一篇: RT struct 文件 保存为nii文