老師問我 Spring MVC 的工作流程
GitHub:https://github.com/nateshao/ssm/tree/master/106-springmvc-hello
1. Spring MVC概述
什么是Spring MVC?
Spring MVC是Spring提供的一個實現(xiàn)了Web MVC設(shè)計模式的輕量級Web框架。它與Struts2框架一樣,都屬于MVC框架,但其使用和性能等方面比Struts2更加優(yōu)異。
Spring MVC具有以下特點:
- 是Spring框架的一部分,可以方便的利用Spring所提供的其他功能。
- 靈活性強,易于與其他框架集成。
- 提供了一個前端控制器DispatcherServlet,使開發(fā)人員無需額外開發(fā)控制器對象。
- 可自動綁定用戶輸入,并能正確的轉(zhuǎn)換數(shù)據(jù)類型。
- 內(nèi)置了常見的校驗器,可以校驗用戶輸入。如果校驗不能通過,那么就會重定向到輸入表單。
- 支持國際化。可以根據(jù)用戶區(qū)域顯示多國語言。
- 支持多種視圖技術(shù)。它支持JSP、Velocity和FreeMarker等視圖技術(shù)。
- 使用基于XML的配置文件,在編輯后,不需要重新編譯應(yīng)用程序。
2. 第一個Spring MVC應(yīng)用
在IDEA中,創(chuàng)建一個名稱為106-springmvc-hello的Web項目,具體參考:https://github.com/nateshao/ssm/tree/master/106-springmvc-hello
在web.xml中,配置Spring MVC的前端控制器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">
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/applicationContext.xml</param-value>
- </context-param>
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <servlet>
- <servlet-name>dispatcher</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>dispatcher</servlet-name>
- <!-- <url-pattern>*.form</url-pattern>-->
- <url-pattern>/</url-pattern>
- </servlet-mapping>
- </web-app>
dispatcher-servlet.xml
- <?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.nateshao"/>
- <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>
hello.jsp
- <%--
- Created by IntelliJ IDEA.
- User: 邵桐杰
- Date: 2021/10/16
- Time: 16:13
- To change this template use File | Settings | File Templates.
- --%>
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <html>
- <head>
- <title>Title</title>
- </head>
- <body>
- <h2>hello springmvc</h2>
- </body>
- </html>
- <%-- 用EL表達(dá)式獲取后臺處理器封裝的信息 --%>
- $END$
控制臺輸出:
瀏覽器訪問:http://localhost:8080/106_springmvc_hello_war_exploded/hello
3. Spring MVC的工作流程(重點!!!)
Spring MVC是如何工作的呢?(面試高頻)
“通過入門案例的學(xué)習(xí),相信讀者對Spring MVC的使用已經(jīng)有了一個初步的了解。在實際開發(fā)中,我們的實際工作主要集中在控制器和視圖頁面上,但Spring MVC內(nèi)部完成了很多工作,這些程序在項目中具體是怎么執(zhí)行的呢?接下來,將通過一張圖來展示Spring MVC程序的執(zhí)行情況。
- 用戶通過瀏覽器向服務(wù)器發(fā)送請求,請求會被Spring MVC的前端控制器DispatcherServlet所攔截
- DispatcherServlet攔截到請求后,會調(diào)用HandlerMapping處理器映射器;
- 處理器映射器根據(jù)請求URL找到具體的處理器,生成處理器對象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet;
- DispatcherServlet會通過返回信息選擇合適的HandlerAdapter(處理器適配器);
- HandlerAdapter會調(diào)用并執(zhí)行Handler(處理器),這里的處理器指的就是程序中編寫的Controller類,也被稱之為后端控制器;
- Controller執(zhí)行完成后,會返回一個ModelAndView對象,該對象中會包含視圖名或包含模型和視圖名;
- HandlerAdapter將ModelAndView對象返回給DispatcherServlet;
- DispatcherServlet會根據(jù)ModelAndView對象選擇一個 合適的ViewReslover(視圖解析器) ;
- ViewReslover解析后,會向DispatcherServlet中返回具體的View(視圖) ;
- DispatcherServlet對View進(jìn)行渲染( 即將模型數(shù)據(jù)填充至視圖中) ;
總結(jié)
本章首先對Spring MVC框架進(jìn)行了簡單的介紹,
然后講解了一個Spring MVC入門程序的編寫,
最后通過入門案例對Spring MVC的工作流程進(jìn)行了詳細(xì)講解。
通過本章的學(xué)習(xí),我們能夠了解什么是Spring MVC,以及Spring MVC的優(yōu)點,掌握Spring MVC入門程序的編寫,并能夠熟悉Spring MVC框架的工作流程。