SSM--SpringMVC复习(一)
SpringMVC
Spring MVC 是一个实现了MVC设计模式的请求驱动类型的轻量级Web框架, 本质上相当于 Servlet,以 DispatcherServlet
为核心,负责协调和组织不同组件以完成请求处理并返回响应。通过控制器(C)对模型数据(M)进行封装,并对视图(V)进行解析。
第一个 SpringMVC程序
1. 向 web项目中导入 jar 包
除了依赖于 Spring 的基础模块外,SpringMVC 还需引入下面的支持 jar 包。
<!-- Spring MVC web 支持 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.20</version> </dependency> <!-- Spring MVC json 处理 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.13.0</version> </dependency>
2. 配置文件
配置 WEB-INF/web.xml
,在容器中部署 DispatcherServlet
:
<!-- 配置前端控制器 DispatcherServlet --> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> <!-- 容器启动时立即加载 DispatcherServlet --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <!-- 处理所有URL --> <url-pattern>/</url-pattern> </servlet-mapping>
配置 applicationContext.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: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/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!-- 方式 1:xml 配置--> <bean name="/login" class="com.lsy.demo.controller.LoginController"/> <!-- 方式 2:注解配置 --> <mvc:annotation-driven/> <context:component-scan base-package="com.lsy.demo" /> </beans>
3. 创建 Controller
//方式 1 : xml 配置 public class LoginController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mv = new ModelAndView(); mv.setViewName("test.jsp"); // 设置 view 视图 mv.addObject("msg","hello,mvc"); // 设置 model 数据 return mv; } } //方式2: 注解配置 @Controller public class LoginController{ @RequestMapping("/login") // 映射请求URL: /login public ModelAndView doLogin(User user){ // 封装用户数据到 user 中 ModelAndView mv = new ModelAndView(); mv.setViewName("test.jsp"); // 设置 view 视图 mv.addObject("msg","hello,mvc"); // 设置 model 数据 return mv; // 返回响应数据 } }
4. 创建 View
<a href="${pageContext.request.contextPath }/login"> 登录</a>
SpringMVC 执行流程
SpringMVC 的执行流程如下:
-
用户发起一个 HTTP 请求,该请求会被提交到 DispatcherServlet(前端控制器);
-
由 DispatcherServlet 请求一个或多个 HandlerMapping(处理器映射器),并返回一个执行链(HandlerExecutionChain)。
-
DispatcherServlet 将执行链返回的 Handler(处理器,即程序中我们写的 Controller) 信息发送给 HandlerAdapter(处理器适配器);
-
HandlerAdapter 根据 Handler 信息找到并执行相应的 Handler;
-
Handler 执行完毕后会返回给 HandlerAdapter 一个 ModelAndView 对象(Spring MVC的底层对象,包括 Model 数据模型和 View 视图信息);
-
HandlerAdapter 接收到 ModelAndView 对象后,将其返回给 DispatcherServlet ;
-
DispatcherServlet 接收到 ModelAndView 对象后,会请求 ViewResolver(视图解析器)对视图进行解析;
-
ViewResolver 根据 View 信息匹配到相应的视图结果,并返回给 DispatcherServlet;
-
DispatcherServlet 接收到具体的 View 视图后,进行视图渲染,将 Model 中的模型数据填充到 View 视图中,生成最终的 View(视图);
-
视图负责将结果显示到浏览器(客户端)。
Spring MVC接口
-
DispatcherServlet 是前端控制器,Spring MVC 的所有请求都要经过 DispatcherServlet 来统一分发。DispatcherServlet 相当于一个转发器或中央处理器,控制整个流程的执行,对各个组件进行统一调度,以降低组件之间的耦合性,有利于组件之间的拓展。
-
HandlerMapping 是处理器映射器,其作用是根据请求的 URL 路径,通过注解或者 XML 配置,寻找匹配的处理器(Handler)信息。
-
HandlerAdapter 是处理器适配器,其作用是根据映射器找到的处理器(Handler)信息,按照特定规则执行相关的处理器(Handler)。
-
Handler 是处理器,和 Java Servlet 扮演的角色一致。其作用是执行相关的请求处理逻辑,并返回相应的数据和视图信息,将其封装至 ModelAndView 对象中。
-
View Resolver 是视图解析器,其作用是进行解析操作,通过 ModelAndView 对象中的 View 信息将逻辑视图名解析成真正的视图 View(如通过一个 JSP 路径返回一个真正的 JSP 页面)。
-
View 是视图,其本身是一个接口,实现类支持不同的 View 类型(JSP、FreeMarker、Excel 等)。
注意:以上组件中,需要开发人员进行开发的是处理器(Handler,常称Controller)和视图(View)
静态资源放行
在项目中的 web.xml 文件中,配置 SpringMVC 前端控制器(DispatcherServlet)时,通过映射路径都会配置为 / (<url-pattern>/</url-pattern>),这就导致请求的静态资源 url 也会被 DispatcherServlet 捕获而又得不到处理,造成静态资源访问失败。如果想放行静态资源,可通过下面几种方式。
<!-- 配置前端控制器 DispatcherServlet --> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
方式一: default Servlet 放行静态资源
修改 web.xml ,利用源默认servlet放行静态资源。default servlet 由 tomcat 默认提供,配置在 tomcat 的 /conf/web.xml 中。
<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.png</url-pattern> </servlet-mapping>
方式二:mvc:default-servlet 放行静态资源
修改 springmvc.xml ,添加默认的 Servlet 控制器放行所有资源 。
<mvc:default-servlet-handler/>
方式三:mvc:resources 放行静态资源
修改 springmvc.xml ,使用静态资源访问 。
<!-- 使用SpringMVC提供的静态资源映射进行处理--> <mvc:resources mapping="/image/**" location="/image/" /> <mvc:resources mapping="/css/**" location="/css/" /> <mvc:resources mapping="/js/**" location="/js/" />
方式四:dispatcherServlet 只处理固定后缀的请求
在 web.xml 中配置前端控制器时,指定只处理某种后缀的 URL (比如 *.do 或 *.action)
<servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping>
原文地址:https://blog.csdn.net/qq_63843408/article/details/144012577
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!