SpringMVC五大組件與執(zhí)行原理分析總結(jié)
Spring MVC是包含在spring中的一個基于MVC設(shè)計思想的Web應用程序框架,目的是簡化開發(fā)工作,提高開發(fā)效率。
優(yōu)點
- 和Spring框架無縫集成,能直接使用Spring的IoC容器、AOP支持;
- 提供了多種將請求URL映射到控制器的機制;并支持參數(shù)的類型轉(zhuǎn)換,自動裝載,校驗等功能;
- 具有強大的擴展性,可根據(jù)需要方便的擴展框架的功能。
SpringMVC 五大組件
- DispatcherServlet 負責分發(fā)請求(前端(核心)控制器)
- HandlerMapping 負責根據(jù)請求 找到對應的控制器(處理器映射器)
- Controller 處理請求的控制器
- ModelAndView 封裝數(shù)據(jù)信息以及視圖信息
- ViewResolver 通過處理找到對應的頁面(視圖解析器)
1、DispatcherServlet(前端(核心)控制器)
DispatcherServlet 是SpringMVC 最核心的一個控件。它是前端核心控制器,在web.xml中進行相關(guān)的配置。它可以將發(fā)送過來的請求進行匹配操作,再進行攔截。將攔截下來的所有請求根據(jù)對應的規(guī)則發(fā)送到對應的Controller進行處理。它是前端控制器設(shè)計模式的實現(xiàn),能夠提供Spring Web MVC的集中節(jié)點,而且負責職責的分派,而且與Spring IoC容器無縫集成。
配置DispatcherServlet :
<!-- 配置前端控制器,配置Servlet --> <servlet> <servlet-name>springMvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!--配置請求路徑--> <servlet-mapping> <servlet-name>springMvc</servlet-name> <url-pattern>*.form</url-pattern> </servlet-mapping>
DispatcherServlet配置在web.xml文件中。init-param為Servlet啟動所需參數(shù)。DispatcherServlet會讀取初始shucontextConfigLocation參數(shù)里面的值從而獲取springmvc的配置位置自啟動容器
2、HandlerMapping(處理器映射器)
HandlerMapping 是處理器映射,它的關(guān)鍵作用是將請求進行派發(fā),負責請將求與控制器建立互相對應的關(guān)系。它最終由 DispatcherServlet 調(diào)用,DispatcherServlet 會從容器中取出所有 HandlerMapping 實例并遍歷,讓 HandlerMapping 實例根據(jù)自己實現(xiàn)類的方式去嘗試查找 Handler。它標明了路徑與Controller的對應關(guān)系,不同的路徑訪問不同的Controller
配置HandlerMapping :
<!--開啟mvc注解掃描--> <mvc:annotation-driven/> <!--創(chuàng)建Controller bean--> <bean id="helloController" class="包名+類名"/> <bean class="org.springframework.web.servlrt.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <props> <prop key="/hello">helloController</prop> </props> </property> </bean>
3、Controller(處理請求的控制器)
處理請求的控制器,負責處理由DispatcherServlet 分發(fā)的請求,把用戶請求的數(shù)據(jù)發(fā)送到業(yè)務處理層處理之后封裝成一個Model ,然后把該Model 返回給對應的View 進行展示。它實際上就是用來處理業(yè)務邏輯的Java類。
配置Controller類 :
@Controller public class DataController { @RequestMapping("getData") public ModeAndView hello(String Id) { System.out.println("hello"); return new ModeAndView("hello") } }
4、ModelAndView(封裝數(shù)據(jù)和視圖信息)
ModelAndView 是進行封裝數(shù)據(jù)信息和視圖信息的模型。使用ModelAndView類用來存儲處理完后的結(jié)果數(shù)據(jù)。ModelAndView中的Model代表模型,View代表視圖,很好地解釋了該類的作用。業(yè)務處理器調(diào)用模型層處理完用戶請求后,把結(jié)果數(shù)據(jù)存儲在該類的model屬性中,把要返回的視圖信息存儲在該類的view屬性中,然后返回給SpringMVC框架??蚣芡ㄟ^調(diào)用配置文件中定義的視圖解析器,對該對象進行解析,最后把結(jié)果數(shù)據(jù)顯示在指定的頁面上。
5、ViewResolver(視圖解析器)
視圖解析器ViewResolver 的主要作用是把一個邏輯上的視圖名稱解析為一個視圖。
配置ViewResolver :
<!-- 配置視圖解析器 --> <bean class="org.springframework.web.servlet.view.InternalResour ceViewResolver"> <property name="prefix" value="/WEB-INF/"/> <property name="suffix" value=".html"></property> </bean>
SpringMVC執(zhí)行原理
- 發(fā)起請求到前端控制器DispatcherServlet
- 前端控制器調(diào)用處理器映射器HandlerMapping查找Handler
- 處理器映射器向前端控制器返回找到的Handler
- 前端控制器調(diào)用處理器適配器HandlerAdapter執(zhí)行Handler
- 處理器適配器去執(zhí)行Handler
- Handler執(zhí)行完成給處理器適配器返回ModelAndView
- 處理器適配器向前端控制器返回ModelAndView
- 前端控制器請求視圖解析器ViewResolver去進行視圖解析
- 視圖解析器向前端控制器返回視圖View
- 前端控制器進行視圖渲染向用戶響應結(jié)果
總結(jié)
DispatcherServlet(前端控制器)接收來自客戶端的URL請求。請求分發(fā)器借助處理器映射器(HandlerMapping)來查找對應的處理器Handler(控制器),分發(fā)本次請求。請求分發(fā)器利用處理器適配器(HandlerAdapter)來執(zhí)行對應的處理器(控制器)。處理器調(diào)用方法處理本次請求,返回模型視圖對象(ModelAndView)。請求分發(fā)器借助視圖解析器(ViewResolver)解析模型視圖,得到對應的視圖(View)。請求分發(fā)器調(diào)用視圖中的方法,同時將數(shù)據(jù)模型交給視圖對象,完成給客戶端的應答。
到此這篇關(guān)于SpringMVC五大組件與執(zhí)行原理分析總結(jié)的文章就介紹到這了,更多相關(guān)SpringMVC五大組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis插入Oracle數(shù)據(jù)庫日期型數(shù)據(jù)過程解析
這篇文章主要介紹了Mybatis插入Oracle數(shù)據(jù)庫日期型數(shù)據(jù)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09Java NIO.2 使用Path接口來監(jiān)聽文件、文件夾變化
Java7對NIO進行了大的改進,新增了許多功能,接下來通過本文給大家介紹Java NIO.2 使用Path接口來監(jiān)聽文件、文件夾變化 ,需要的朋友可以參考下2019-05-05在springboot3微項目中如何用idea批量創(chuàng)建單元測試邏輯
這篇文章主要介紹了在SpringBoot3項目中使用IntelliJIDEA批量創(chuàng)建單元測試包括準備工作(確保項目配置正確,添加測試依賴),使用IntelliJIDEA創(chuàng)建測試,感興趣的朋友一起看看吧2024-10-10String?concat(String?str)使用小結(jié)
這篇文章主要介紹了String?concat(String?str)使用小結(jié),在了解concat()之前,首先需要明確的是String的兩點特殊性,一是長度不可變二是值不可變,本文給大家詳細講解,需要的朋友可以參考下2022-11-11java-RGB調(diào)色面板的實現(xiàn)(事件監(jiān)聽器之匿名內(nèi)部類)
這篇文章主要介紹了java-RGB調(diào)色面板的實現(xiàn)(事件監(jiān)聽器之匿名內(nèi)部類),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11詳解spring boot jpa整合QueryDSL來簡化復雜操作
這篇文章主要介紹了詳解spring boot jpa整合QueryDSL來簡化復雜操作,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04