您好,登錄后才能下訂單哦!
這篇文章主要講解了SpringMVC底層執行的原理與流程,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。
一個簡單的HelloSpringMVC程序
先在web,xml中注冊一個前端控制器(DispatcherServlet)
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!--配置DispatcherServlet:這是SpringMVC的核心,請求分發器,前端控制器--> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--要綁定springmvc的配置文件--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc-servlet.xml</param-value> </init-param> <!--啟動級別為1--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
配置文件(springmvc-servlet.xml)
HandlerMapper是處理器映射器-->根據請求的地址去找處理器(如案例中的"/hello")
HandlerAdapter是處理器適配器-->找到處理器后根據id去適配對應的controller(如適配到案例中的HelloController),controller會返回ModelAndView及其前端數據
ViewResolver是視圖解析器,其作用為:
1.獲取到ModelAndView中的數據
2.解析視圖名稱
3.拼接視圖名稱
4.數據渲染
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <bean id="/hello" class="com.kuang.contorller.HelloController"/> </beans>
controller層:
實現Controller接口,重寫內部方法(一般不會使用,這是底層原理)
ModelAndView是模型、視圖
public class HelloController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { ModelAndView mv = new ModelAndView(); mv.addObject("msg","HelloSpringMVC!"); mv.setViewName("test"); return mv; } }
底層流程圖
實線是SpringMVC已經幫你實現好了,虛線是需要自己手動
以上僅是說明底層執行原理,實際開發并不會這樣去使用!
在實際開發中SpringMVC推薦使用注解的方式
在注解開發中,不需要我們去配置處理器適配器和處理器映射器。
web.xml中只需配置DispatcherServlet前端控制器
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <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-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>SpringMVC</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
在springmvc-servlet.xml中配置視圖解析器等
<context:component-scan base-package="com.kuang.controller"/> /*組件掃描,用于掃描controller下的包*/ <mvc:default-servlet-handler/> /*靜態資源過濾*/ <mvc:annotation-driven/> /*這個就幫助我們配置了映射器以及適配器*/
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:component-scan base-package="com.kuang.controller"/> <mvc:default-servlet-handler/> <mvc:annotation-driven/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
contorller
@Controller //說明這類被Spring托管了 @RequestMapping("/hello") public class HelloController { @RequestMapping("/h2") //這個注解會執行視圖解析器 public String hello(Model model){ model.addAttribute("msg","helloSpringMVCAnnotation"); return "hello"; } }
看完上述內容,是不是對SpringMVC底層執行的原理與流程有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。