SSM--SpringMVC复习(一)

embedded/2024/11/25 14:37:41/

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/embedded/140405.html

相关文章

十五届蓝桥杯赛题-c/c++ 大学b组

握手问题 很简单&#xff0c;相互牵手即可&#xff0c;但是要注意&#xff0c;第一个人只能与其他49个人牵手&#xff0c;所以开头是加上49 #include <iostream> using namespace std; int main() {int cnt0;for(int i49;i>7;i--){cnti;//cout<<i<<&quo…

第十章 JavaScript的运用

10.1 JavaScript概述 1.JavaScript简介 JavaScript是一种基于对象&#xff08;Object&#xff09;和事件驱动&#xff08;Event Driven&#xff09;并具有安全性能的脚本语言&#xff0c;能够与HTML&#xff08;超文本标记语言&#xff09;、Java语言一起在Web页面中与Web客…

银河麒麟v10 x86架构二进制方式kubeadm+docker+cri-docker搭建k8s集群(证书有效期100年) —— 筑梦之路

环境说明 master&#xff1a;192.168.100.100 node: 192.168.100.101 kubeadm 1.31.2 &#xff08;自编译二进制文件&#xff0c;证书有效期100年&#xff09; 银河麒麟v10 sp2 x86架构 内核版本&#xff1a;5.4.x 编译安装 cgroup v2启用 docker版本&#xff1a;27.x …

Mac配置maven环境及在IDEA中配置Maven

Mac配置maven环境及在IDEA中配置Maven 1. 介绍 Maven是一款广泛用于Java等JVM语言项目的工具&#xff0c;它以项目对象模型&#xff08;POM&#xff09;为基础进行项目管理&#xff0c;通过POM文件来定义项目信息和依赖关系。同时&#xff0c;它也是构建自动化工具&#xff0…

Sparrow系列拓展篇:消息队列和互斥锁等IPC机制的设计

前言 笔者这几天利用空闲时间为Sparrow添加了消息队列和互斥锁&#xff0c;已经有十余天没有更过文章了&#xff0c;今天下笔想写一写博客&#xff0c;遂继续为Sparrow更新一篇拓展篇。 其实也没什么好讲的&#xff0c;信号量、消息队列、互斥锁这些IPC机制都大差不差&#x…

DVWA 在 Windows 环境下的部署指南

目录预览 一、靶场介绍二、前置准备1. 环境准备2.靶场下载 三、安装步骤1.配置Phpstudy2.配置数据库3.配置DVWA4.登入DVWA靶场 四、参考链接 一、靶场介绍 DVWA 一共包含了十个攻击模块&#xff0c;分别是&#xff1a; Brute Force&#xff08;暴力&#xff08;破解&#xff…

GoZero接口用postman调用字段类型不够并优化:如何解决数据库插入与更新失败问题

在开发过程中&#xff0c;我们常常会遇到因字段类型不匹配导致的数据库插入失败的问题。本文将探讨一个具体的错误案例&#xff0c;并提供一种优化方案&#xff0c;帮助开发者更好地处理类似的问题。 ## 错误背景 在使用 GoZero 框架开发接口时&#xff0c;我们遇到了如下错误…

埃文科技携手河南企业代表团亮相第十九届广州中博会

2024年11月15日-18日&#xff0c;第十九届中国国际中小企业博览会&#xff08;以下简称“中博会”)在广州举行。郑州埃文科技有限公司携手河南企业代表团&#xff0c;以“聚焦新型工业化发展新质生产力”为主题&#xff0c;亮相中博会&#xff0c;展现河南省在数字化转型和新型…