SSM--SpringMVC复习(一)

ops/2024/11/29 2:30:36/

SpringMVC

Spring MVC 是一个实现了MVC设计模式的请求驱动类型的轻量级Web框架, 本质上相当于 Servlet,以 DispatcherServlet 为核心,负责协调和组织不同组件以完成请求处理并返回响应。通过控制器(C)对模型数据(M)进行封装,并对视图(V)进行解析。

教程:Spring MVC框架入门教程 - C语言中文网

第一个 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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttps://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 {@Overridepublic 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: /loginpublic 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 的执行流程如下:

  1. 用户发起一个 HTTP 请求,该请求会被提交到 DispatcherServlet(前端控制器);

  2. 由 DispatcherServlet 请求一个或多个 HandlerMapping(处理器映射器),并返回一个执行链(HandlerExecutionChain)。

  3. DispatcherServlet 将执行链返回的 Handler(处理器,即程序中我们写的 Controller) 信息发送给 HandlerAdapter(处理器适配器);

  4. HandlerAdapter 根据 Handler 信息找到并执行相应的 Handler;

  5. Handler 执行完毕后会返回给 HandlerAdapter 一个 ModelAndView 对象(Spring MVC的底层对象,包括 Model 数据模型和 View 视图信息);

  6. HandlerAdapter 接收到 ModelAndView 对象后,将其返回给 DispatcherServlet ;

  7. DispatcherServlet 接收到 ModelAndView 对象后,会请求 ViewResolver(视图解析器)对视图进行解析;

  8. ViewResolver 根据 View 信息匹配到相应的视图结果,并返回给 DispatcherServlet;

  9. DispatcherServlet 接收到具体的 View 视图后,进行视图渲染,将 Model 中的模型数据填充到 View 视图中,生成最终的 View(视图);

  10. 视图负责将结果显示到浏览器(客户端)。

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>

http://www.ppmy.cn/ops/137536.html

相关文章

深入解析 Dockerfile:从入门到实践

一、Dockerfile 是什么&#xff1f; Dockerfile 是一个纯文本文件&#xff0c;其中包含了一系列指令&#xff0c;用于定义如何构建 Docker 镜像。通过 Dockerfile&#xff0c;开发者可以实现应用程序环境的一致性和自动化部署。 1.1 Dockerfile 的作用 描述镜像构建过程。自…

深度学习笔记之BERT(三)RoBERTa

深度学习笔记之RoBERTa 引言回顾&#xff1a;BERT的预训练策略RoBERTa训练过程分析静态掩码与动态掩码的比较模型输入模式与下一句预测使用大批量进行训练使用Byte-pair Encoding作为子词词元化算法更大的数据集和更多的训练步骤 RoBERTa配置 引言 本节将介绍一种基于 BERT \t…

后端接受大写参数(亲测能用)

重要点引入包别引用错了 import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data;JsonSerialize Data public class Item {JsonProperty(value "Token")private String token…

第144场双周赛题解:两个字符串得切换距离

两个字符串得切换距离 1、题目描述 给你两个长度相同的字符串 s 和 t &#xff0c;以及两个整数数组 nextCost 和 previousCost 。 一次操作中&#xff0c;你可以选择 s 中的一个下标 i &#xff0c;执行以下操作 之一 &#xff1a; 将 s[i] 切换为字母表中的下一个字母&am…

Python Flask快速开发网站

在Web开发领域,Python拥有多种优秀的Web框架,例如Django、Flask、Pyramid等。其中Flask是一个微型框架,核心代码非常精简,只包含了Web应用最基本的功能。这使得Flask非常轻量级,容易上手,适合快速开发小型Web应用。本文将介绍如何使用Flask快速搭建一个简单的网站。 © ivw…

基于python+django+vue.js开发的停车管理系统

功能介绍 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。 功能包括&#xff1a;车位管理、会员管理、停车场管理、违规管理、用户管理、日志管理、系统信息模块。 源码地址 https://github.com/geeeeeeeek/pytho…

Vue前端面试进阶(五)

使用Element UI开发的实际项目 在实际项目中&#xff0c;我使用Element UI来快速构建用户界面。Element UI是一套为开发者、设计师和产品经理准备的基于Vue 2.0的桌面端组件库&#xff0c;它提供了丰富的UI组件&#xff0c;极大地提高了开发效率。然而&#xff0c;在使用过程中…

【linux】手搓线程池

【linux】进程池 线程池: 一种线程使用模式。线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。而线程池维护着多个线程&#xff0c;等待着 监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利…