Spring MVC:域对象共享数据

Spring MVC

  • 前言
  • 域对象共享数据
    • 使用 ModelAndView 向 request 域对象中共享数据
    • 使用 Map 、Model 或 ModelMap 向 request 域对象中共享数据
    • 使用 @SesionAttributes 注解向 session 域对象中共享数据
    • 使用 Servlet API 向 application 域对象中共享数据

在这里插入图片描述

前言

在上一章中,谈到处理器 Controller 获取请求参数的实现。那么,在处理器 Controller 处理请求后,下一步是将模型数据通过域对象共享的方式(结果会封装成模型视图 ModelAndView 对象)返回给前端控制器 DispatcherServlet 。

模型数据:Model 层中请求处理后的结果(会返回给处理器 Controller )

在这里插入图片描述

域对象共享数据

域对象共享数据,指在 Spring MVC 应用中,多个 Controller 或 Model 对象可以共享相同的数据。通过共享数据,可以避免重复的数据获取和数据传递,提高程序的性能和可维护性。

在 Spring MVC 中,域对象共享数据可以通过多种方式实现:

  1. 使用 ModelAndView 向 request 域对象中共享数据
  2. 使用 Map 、Model 或 ModelMap 向 request 域对象中共享数据
  3. 使用 @SesionAttributes 注解向 session 域对象中共享数据
  4. 使用 Servlet API 向 application 域对象中共享数据

使用 ModelAndView 向 request 域对象中共享数据

ModelAndView 对象有 model 和 view 两个属性。model 属性用于向请求域共享数据,而 view 属性用于设置视图。

简单示例:
1.首先进行注入字符串

package cn.edu.springmvcdemo.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;@Controller
public class DomainObjectSDDemo {@RequestMapping("/mavTest")public ModelAndView mavTest(){ModelAndView mav = new ModelAndView();//1.字符串注入mav.addObject("name","admin"); //添加数据模型mav.setViewName("DomObjSharedData"); //设置视图return mav;}
}

创建 DomObjSharedData.jsp

<%--Created by IntelliJ IDEA.User: dellDate: 2023/7/22Time: 15:04To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>name = ${name} <%-- 或者 ${requestScope.name} --%>
</body>
</html>

结果如图:
在这里插入图片描述

2.接着进行注入对象
先创建一个实体类 DomainObject ,定义编号、名字和年龄属性 (下面例子中使用到的对象都是 DomainObject )

package cn.edu.springmvcdemo.model;public class DomainObject {private int id;private String name;private int age;public DomainObject() {super();}public DomainObject(int id, String name, int age) {this.id = id;this.name = name;this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "DomainObject{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}
}

接着,对象注入

package cn.edu.springmvcdemo.controller;import cn.edu.springmvcdemo.model.DomainObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;@Controller
public class DomainObjectSDDemo {@RequestMapping("/mavTest")public ModelAndView mavTest(){ModelAndView mav = new ModelAndView();//1.字符串注入mav.addObject("name","admin"); //添加数据模型//2.对象注入DomainObject domainObject = new DomainObject();domainObject.setId(722);domainObject.setName("admin");domainObject.setAge(18);mav.addObject("admin",domainObject);mav.setViewName("DomObjSharedData"); //设置视图return mav;}
}

然后,DomObjSharedData.jsp 添加获取对象的内容

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>name = ${name} <%-- 或者 ${requestScope.name} --%><br>user = ${admin}
</body>
</html>

结果如图:
在这里插入图片描述

3.最后进行注入 list 集合与 map 集合
先在 pom.xml 中添加依赖

<!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl -->
<dependency><groupId>org.apache.taglibs</groupId><artifactId>taglibs-standard-impl</artifactId><version>1.2.5</version>
</dependency><!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-spec -->
<dependency><groupId>org.apache.taglibs</groupId><artifactId>taglibs-standard-spec</artifactId><version>1.2.5</version>
</dependency>

接着,list 集合和 map 集合注入

package cn.edu.springmvcdemo.controller;import cn.edu.springmvcdemo.model.DomainObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;@Controller
public class DomainObjectSDDemo {@RequestMapping("/mavTest")public ModelAndView mavTest(){ModelAndView mav = new ModelAndView();//1.字符串注入mav.addObject("name","admin"); //添加数据模型//2.对象注入DomainObject domainObject1 = new DomainObject();domainObject1.setId(722);domainObject1.setName("admin");domainObject1.setAge(18);mav.addObject("admin",domainObject1);//3. list 集合注入DomainObject domainObject2 = new DomainObject();domainObject2.setId(723);domainObject2.setName("administrator");domainObject2.setAge(20);mav.addObject("administrator",domainObject2);List<DomainObject> domainObjects = new ArrayList<>();domainObjects.add(domainObject1);domainObjects.add(domainObject2);mav.addObject("domainObjects",domainObjects); //存入 List 类型数据//3. map 集合注入Map<Integer,DomainObject> map = new HashMap<Integer,DomainObject>();map.put(1,domainObject1);map.put(2,domainObject2);mav.addObject("map",map); //存入 Map 类型数据mav.setViewName("DomObjSharedData"); //设置视图return mav;}
}

然后,DomObjSharedData.jsp 添加获取 list 集合和 map 集合的内容

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<body>name = ${name} <%-- 或者 ${requestScope.name} --%><br>user = ${admin}<br><c:forEach var="domainObject" items="${domainObjects}">domainObjects = ${domainObject}<br>domainObject_names = ${domainObject.name}<br></c:forEach><br><c:forEach var="map" items="${map}">map = ${map}<br></c:forEach>
</body>
</html>

注:这次需要重启 JRebel 才能正常显示

结果如图:
在这里插入图片描述

使用 Map 、Model 或 ModelMap 向 request 域对象中共享数据

使用 Map 、Model 或 ModelMap 向 request 域对象中共享数据是项目开发中相对比较常用的方式。与使用 ModelAndView 相比,更简单便捷些。

简单示例:
在上面案例的基础上,只需在 DomainObjectSDDemo 类中进行修改
1.使用 Map 向 request 域对象中共享数据

package cn.edu.springmvcdemo.controller;import cn.edu.springmvcdemo.model.DomainObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Map;@Controller
public class DomainObjectSDDemo {@RequestMapping("/mvTest1")public String mvTest1(Map<String,Object> map){//注入字符串map.put("name","admin"); //对比使用 ModelAndView :mav.addObject("name","admin");//注入对象DomainObject domainObject1 = new DomainObject();domainObject1.setId(722);domainObject1.setName("admin");domainObject1.setAge(18);map.put("admin",domainObject1); //对比使用 ModelAndView :mav.addObject("admin",domainObject1);//主要区别在于 map.put() 和 mav.addObject(),不一一演示return "DomObjSharedData"; /**对比使用 ModelAndView :ModelAndView mav = new ModelAndView();mav.setViewName("DomObjSharedData"); //设置视图return mav;**/}
}

结果如图:
在这里插入图片描述

2.使用 Model 向 request 域对象中共享数据

@RequestMapping("/mvTest2")
//对比使用 map 的方法参数:Map<String,Object> map
public String mvTest2(Model model){//注入字符串//对比使用 Map:map.put("name","admin"); //对比使用 ModelAndView :mav.addObject("name","admin");model.addAttribute("name","admin");//注入对象DomainObject domainObject1 = new DomainObject();domainObject1.setId(722);domainObject1.setName("admin");domainObject1.setAge(18);//对比使用 Map:map.put("admin",domainObject1); //对比使用 ModelAndView :mav.addObject("admin",domainObject1);model.addAttribute("admin",domainObject1);//主要区别在于 model.addAttribute()、map.put() 和 mav.addObject(),不一一演示return "DomObjSharedData"; /**对比使用 ModelAndView :ModelAndView mav = new ModelAndView();mav.setViewName("DomObjSharedData"); //设置视图return mav;**/
}

结果如图:
在这里插入图片描述

3.使用 ModelMap 向 request 域对象中共享数据

@RequestMapping("/mvTest3")
//而 ModelMap 将 model 和 map 综合起来了。即既可以使用 addAttribute() 也可以使用 put()
//方法参数为 ModelMap 
public String mvTest3(ModelMap modelMap){modelMap.addAttribute("name","admin"); // 或者 modelMap.put("name","admin");DomainObject domainObject1 = new DomainObject();domainObject1.setId(722);domainObject1.setName("admin");domainObject1.setAge(18);modelMap.put("admin",domainObject1); // 或者 modelMap.addAttribute("admin",domainObject1);return "DomObjSharedData";
}

结果如图:
在这里插入图片描述

总体来讲,向 request 域对象中共享数据的各种方式区别不大,自行根据个人喜好习惯选择使用即可。

使用 @SesionAttributes 注解向 session 域对象中共享数据

使用 @SesionAttributes 注解可以将数据共享到 session 域对象中,同时也共享到 request 域对象中。

@SesionAttributes 注解属性

  • value :通过键来指定共享的值
  • types :通过类型来指定共享的值
//只能用于类级别
//书写格式
@SessionAttributes(value = "xxx",types = "xxx.class")
//或者
@SessionAttributes(value = {"xxx","xxx"...},types = {"xxx.class","xxx.class"...})

简单示例:
使用 @SesionAttributes 注解向 session 域对象中共享数据

package cn.edu.springmvcdemo.controller;import cn.edu.springmvcdemo.model.DomainObject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;@SessionAttributes(value = {"name","admin"}) //或者 @SessionAttributes(types = {String.class,DomainObject.class})
@Controller
public class DomainObjectSDDemo_SA {@RequestMapping("/saTest")public String saTest(ModelMap modelMap){//字符串注入modelMap.put("name","admin");//对象注入//实体类 DomainObject ,ModelAndView 的示例中已创建DomainObject domainObject1 = new DomainObject();domainObject1.setId(722);domainObject1.setName("admin");domainObject1.setAge(18);modelMap.put("admin", domainObject1);return "DomObjSharedData_SA";}
}

创建 DomObjSharedData_SA.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>获取 request 域中的 name : ${requestScope.name} <br>获取 session 域中的 name : ${sessionScope.name} <br>admin = ${admin}
</body>
</html>

结果如图:
在这里插入图片描述

使用 Servlet API 向 application 域对象中共享数据

使用 Servlet API 可以将数据共享到 application 域对象中。虽然不能同时共享到其他域对象中,但也可以使用 Servlet API 将数据共享到 session 域对象与 request 域对象中。

简单示例:
使用 Servlet API 向 application 域对象、session 域对象与 request 域对象中共享数据

package cn.edu.springmvcdemo.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;@Controller
public class DomainObjectSDDemo_SAPI {@RequestMapping("/sapiTest")public String sapiTest(HttpSession session, HttpServletRequest request){//1.向 application 域对象共享数据ServletContext application = session.getServletContext();application.setAttribute("name", "admin1");//2.向 session 域对象共享数据session.setAttribute("name","admin2");//3.向 request 域对象共享数据request.setAttribute("name","admin3");return "DomObjSharedData_SAPI";}
}

创建 DomObjSharedData_SAPI.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>获取 application 域中的 name : ${applicationScope.name} <br>获取 session 域中的 name : ${sessionScope.name} <br>获取 request 域中的 name : ${requestScope.name}
</body>
</html>

结果如图:
在这里插入图片描述

@ModelAttribute 注解介绍
1.使用 @ModelAttribute 注解在方法上:在执行目标方法前,先从上到下逐一执行有 @ModelAttribute 注解的方法
2.使用 @ModelAttribute 注解在方法的参数上:用于从 Model 、Form 表单或者 URL 请求参数中获取属性值

通常 @ModelAttribute 注解应用在修改对象的某些属性值,而其他属性值不允许修改或保持不变的场景中

简单示例:
创建修改信息的页面 DomObjSharedData_UPDATE.jsp

<%-- 只修改年龄,id 隐藏,名字不允许修改 --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body><h3>信息修改</h3><form action="${pageContext.request.contextPath}/updateTest" method="post"><input type="hidden" name="id" value="722" />年龄:<input type="text" name="age" /><input type="submit" value="修改"/></form>
</body>
</html>

创建成功修改跳转的页面 accessing.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body><h2>提交成功!</h2>
</body>
</html>

在没有使用 @ModelAttribute 注解前:不作修改的属性值可能为空,或者使用传统的方法修改实现
在这里插入图片描述
在这里插入图片描述

在 Spring MVC 中,提供的 @ModelAttribute 注解也可以实现修改

package cn.edu.springmvcdemo.controller;import cn.edu.springmvcdemo.model.DomainObject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;@Controller
public class DomainObjectSDDemo_MA {//先执行有 @ModelAttribute 注解的方法@ModelAttribute//默认 id 参数赋值为 null ,@RequestParam 注解知识点private void getUser(@RequestParam(value = "id",required = false) Integer id, ModelMap modelMap){System.out.println("id ==" + id);DomainObject domainObject = new DomainObject();//通过传递的 id 值匹配数据库中对应的记录,返回一个对应的对象//模拟:获取 id 对应的对象属性值domainObject.setName("admin");domainObject.setAge(18);//注入( DomainObject对象,attributeName 规定写为 domainObject )modelMap.addAttribute("domainObject",domainObject); //注:attributeName 与对应的对象名字保持一致,首字母改为小写}//信息修改@RequestMapping("/update")public String update(){return "DomObjSharedData_UPDATE";}//修改成功@RequestMapping("/updateTest")public String updateTest(DomainObject domainObject){System.out.println("修改后的信息:" + domainObject);//信息修改后为:DomainObject{id=722, name='null', age=18},这里 name 为空,直接全部覆盖会把数据库的 name 信息也修改为 null//或者/*** 传统做法:* 第一步:通过传递的id值匹配数据库中对应的记录,返回一个对应的对象* 第二步:将传递的对象要修改的属性覆盖到从数据库中查询出的对象的属性里* 第三步:调用 service 层的修改方法,实现修改* 这里思想就是单一对修改的字段进行覆盖。* **///使用 @ModelAttribute 注解后,可以直接全部覆盖,省略了传统做法的第一二步,直接调用 service 层的修改方法即可return "accessing";}
}

注:在注入对象中,关于 attributeName 的命名也可以使用第二种方式。如图:
在这里插入图片描述

测试结果:
1.填写要修改的年龄,点击提交
在这里插入图片描述

2.修改成功,同时没有修改的信息保持不变,而不是为空值
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/120106.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis的数据类型到底有什么奥秘

这里我们先只介绍五种常用的数据类型~ 目录 1、string 2、hash 3、list 4、set 5、zset 6、示例 1、string 数据类型&#xff1a;string内部编码&#xff1a;raw、int、embstr 说明&#xff1a; raw是最基本的字符串--底层是一个char数组&#xff08;此处的char是一个字…

【计算机网络】 静态库与动态库

文章目录 静态库实践使用方法总结 动态库实践使用方法总结 静态库与动态库的优缺点静态库优点缺点 动态库缺点优点 库有两种&#xff1a;静态库&#xff08;.a、.lib&#xff09;和动态库&#xff08;.so、.dll&#xff09;。所谓静态、动态是指链接。静态库是将整个库文件都拷…

学习网络编程No.5【TCP套接字通信】

引言&#xff1a; 北京时间&#xff1a;2023/8/25/15:52&#xff0c;昨天刚把耗时3天左右的文章更新&#xff0c;充分说明我们这几天并不是在摆烂中度过&#xff0c;而是在为了更文不懈奋斗&#xff0c;历时这么多天主要是因为该部分知识比较陌生&#xff0c;所以需要我们花费…

京东搜索EE链路演进 | 京东云技术团队

导读 搜索系统中容易存在头部效应&#xff0c;中长尾的优质商品较难获得充分的展示机会&#xff0c;如何破除系统的马太效应&#xff0c;提升展示结果的丰富性与多样性&#xff0c;助力中长尾商品成长是电商平台搜索系统的一个重要课题。其中&#xff0c;搜索EE系统在保持排序…

C#-SQLite-使用教程笔记

微软官网资料链接&#xff08;可下载文档&#xff09; 教程参考链接&#xff1a;SQLite 教程 - SQLite中文手册 项目中对应的system.dat文件可以用SQLiteStudio打开查看 参考文档&#xff1a;https://d7ehk.jb51.net/202008/books/SQLite_jb51.rar 总结介绍 1、下载SQLiteS…

RK3399平台开发系列讲解(内核调试篇)IO 数据工具:iostat和iotop

🚀返回专栏总目录 文章目录 一、iostat 命令二、/proc/diskstats 文件三、iotop 命令沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 在 Linux 系统上,iostat 和 iotop 这两个 IO 数据工具非常常用。它们都是性能分析领域中不可缺少的工具性软件。 一、iostat 命令…

mysql主从复制与读写分离

一&#xff0c;主从复制 1&#xff0c;为什么要做主从复制 单台mysql在安全性&#xff0c;高可用和高并发方面都无法满足实际的需求&#xff0c;所以可以选择配置多台主从数据库服务器以实现读写分离。 2&#xff0c;主从复制的原理 主从复制是为了保证数据的完整性&#xff0c…

界面控件DevExpress .NET应用安全 Web API v23.1亮点:支持Swagger模式

DevExpress拥有.NET开发需要的所有平台控件&#xff0c;包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。 DevExpress 今年第一个重要版本v23.1日前已正式发布了&#xff0c;该版本拥有众多新产品和数十…

javaee spring aop实现事务 项目结构

spring配置文件 <?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.springframewo…

最小生成树Kruskal、Prim算法C++

什么是最小生成树 连通图&#xff1a; 在无向图中&#xff0c;若从顶点v1到顶点v2有路径&#xff0c;则称顶点v1和顶点v2是连通的。如果图中任意一对顶点都是连通的&#xff0c;则称此图为连通图。 生成树&#xff1a; 一个连通图的最小连通子图称作为图的生成树。有n个顶点的…

ARM编程模型-寄存器组

Cortex A系列ARM处理器共有40个32位寄存器,其中33个为通用寄存器,7个为状态寄存器。usr模式和sys模式共用同一组寄存器。 通用寄存器包括R0~R15,可以分为3类: 未分组寄存器R0~R7分组寄存器R8~R14、R13(SP) 、R14(LR)程序计数器PC(R15)、R8_fiq-R12_fir为快中断独有 在不同模…

centos中得一些命令 记录

redis命令 链接redis数据库的命令 redis-cli如果 Redis 服务器在不同的主机或端口上运行&#xff0c;你需要提供相应的主机和端口信息。例如&#xff1a; redis-cli -h <hostname> -p <port>连接成功后&#xff0c;你将看到一个类似于以下的提示符&#xff0c;表…

手写Mybatis:第12章-完善ORM框架,增删改查操作

文章目录 一、目标&#xff1a;完善增删改查二、设计&#xff1a;完善增删改查三、实现&#xff1a;完善增删改查3.1 工程结构3.2 完善增删改查类图3.3 扩展解析元素3.4 新增执行方法3.4.1 执行器接口添加update3.4.2 执行器抽象基类3.4.3 简单执行器 3.5 语句处理器实现3.5.1 …

【Eclipse】Project interpreter not specified 新建项目时,错误提示,已解决

目录 0.环境 1&#xff09;问题截图&#xff1a; 2&#xff09;错误发生原因&#xff1a; 1.解决思路 2.具体步骤 0.环境 windows 11 64位&#xff0c;Eclipse 2021-06 1&#xff09;问题截图&#xff1a; 2&#xff09;错误发生原因&#xff1a; 由于我手欠&#xff0c;将…

YOLOV8实例分割——详细记录环境配置、自定义数据处理到模型训练与部署

前言 Ultralytics YOLOv8是一种前沿的、最先进的&#xff08;SOTA&#xff09;模型&#xff0c;它在前代YOLO版本的成功基础上进行了进一步的创新&#xff0c;引入了全新的特性和改进&#xff0c;以进一步提升性能和灵活性。作为一个高速、精准且易于操作的设计&#xff0c;YO…

搭建个人hMailServer 邮件服务实现远程发送邮件

文章目录 1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 hMailServer 是一个邮件服务器,通过它我们可以搭建自己的邮件服务,通过cpolar内网映射工…

拓扑排序算法 -- dfs、bfs

210. 课程表 II 该题用到「拓扑排序」的算法思想&#xff0c;关于拓扑排序&#xff0c;直观地说就是&#xff0c;让你把⼀幅图「拉平」&#xff0c;⽽且这个「拉平」的图⾥⾯&#xff0c;所有箭头⽅向都是⼀致的&#xff0c;⽐如上图所有箭头都是朝右的。 很显然&#xff0c;如…

视频汇聚/视频云存储/视频监控管理平台EasyCVR部署后无法正常启用是什么问题?该如何解决?

安防监控/视频监控/视频汇聚平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;视频云存储/安防监控汇聚平台EasyCVR支持多种播放协议&#xff0c;包括&#xff1a;HLS、HTTP-FLV、WebSoc…

物联网应用中蓝牙模块怎么选?_蓝牙模块厂家

在蓝牙模块选型前期&#xff0c;一定要了解应用场景以及需要实现的功能&#xff08;应用框图&#xff09;&#xff0c;以及功能实现过程中所能提供调用的接口&#xff08;主从设备&#xff0c;功能&#xff09;&#xff0c;考虑模块供电&#xff0c;尺寸&#xff0c;接收灵敏度…

“深入探究SpringMVC的工作原理与入门实践“

目录 引言1. 什么是SpringMVC?1.1. 模型1.2. 视图1.3. 控制器 2. SpringMVC的工作流程2.1. 客户端发送请求2.2. DispatcherServlet的处理2.3. 处理器映射器的使用2.4. 处理器的执行2.5. 视图解析器的使用2.6. 视图的渲染 3. SpringMVC的核心组件4. 弹簧MVC总结 引言 SpringMV…