ssm框架之SpringMVC:域共享数据

news2025/1/11 2:17:12

本篇主要聊的是在springmvc中的共享域传递数据的使用。如果对共享域可能不了解的话,可以看下前面聊servlet的时候,对共享域的详细描述,以及其作用和方法。传送阵

至于如何构建SpringMVC的环境,以及如何构建一个项目,可以看下前面的文章。传送阵

request共享域

通过 ServletAPI Request 域共享数据

这个前面说过,现在还是来一个实例演示一下:

在这里插入图片描述

重新创建了两个页面,两个页面内容如下:

index.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1 th:text="SpringMVC结合thymeleaf">thyleaf没有效果</h1>
<a th:href="@{/a}"  >测试</a>
</body>
</html>

sucess.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body> 
<p th:text="${req}"></p>
</body>
</html>

现在写一个控制类如下:

@Controller

public class controller {
    @RequestMapping("/a")
    public String test(HttpServletRequest request){
        request.setAttribute("req","我是request");
        return "sucess";
    }
    
    @RequestMapping("/index")
    public String testindex(Model model){
        return "index";
    }
    }

然后访问地址:http://localhost:8080/testSpringMVC_war/index

在这里插入图片描述

然后点击测试如下:

在这里插入图片描述

但是不太推荐这种方式。

通过ModelAndView 类(推荐)

 @RequestMapping("/session")
    public String testSession(HttpSession    session) {
//    public String testSession(HttpServletRequest    request) {
//        request.getSession().setAttribute("ses", "我是session");
        session.setAttribute("ses", "我是session");
        return "sucess";
    }

这个是SpringMVC 官网推荐方式,不过可以看其名字就可以看出其有两个功能,model代表传递数据,view代表控制调整页面。

其实使用使用 ServletAPI Request 等方式本质还是框架帮忙生成ModelAndView 类,然后进行页面控制,这个后面具体看,先看ModelAndView如何使用。

然后再control类中添加方法:

    @RequestMapping("/b")
    public ModelAndView testB( ){
//        创建一个ModelAndView对象
        ModelAndView modelAndView = new ModelAndView();
//        设置模型数据将数据放入reqeuest中
        modelAndView.addObject("req","通过ModeAndView是request");
//        设置视图名称,也就是跳转的页面
        modelAndView.setViewName("sucess");
        return modelAndView;

    }

再index.html中添加:

<a th:href="@{/b}">测试B</a>

然后访问http://localhost:8080/testSpringMVC_war/index

在这里插入图片描述

点击测试B:

在这里插入图片描述

注意:使用modelAndView类,返回数据的话,那么映射方法必须返回modelAndView的对象。

通过model返回Reuest域共享数据(推荐)

前面说了ModelAndView中的model代表传递数据。那么自然可以单独使用model这个来作为传递数据来用。

还是老规矩进行代码演示

    @RequestMapping("/c")
    public String testC(Model model){
        model.addAttribute("req","通过Model是request");
        return "sucess";
    }

然后index.html中添加一条:

<a th:href="@{/c}">测试C</a>

还是访问http://localhost:8080/testSpringMVC_war/index,然后点击测试C,结果如下:

在这里插入图片描述

通过ModelMap返回Reuest域共享数据

这个就不再演示结果了,因为与上面一样,所以只是写代码

在control中添加:

    @RequestMapping("/d")
    public String testD(ModelMap modelMap) {
        modelMap.addAttribute("req", "通过ModelMap是request");
        return "sucess";
    }

然后在index.index中添加

<a th:href="@{/d}">测试D</a>

通过Map返回Reuest域共享数据

@RequestMapping("/e")
public String testE(Map<String, Object> map){
    map.put("req", "通过Map是request");
    return "sucess";
}
<a th:href="@{/e}">测试E</a>

补充-- Model等几个到底为什么可以传递数据

再回答这个问题的生活,想要将如下操作

在control类中如下:

public class controller {
    @RequestMapping("/a")
    public String test(HttpServletRequest request) {
        request.setAttribute("req", "我是request");
        return "sucess";
    }

    @RequestMapping("/b")
    public ModelAndView testB() {
//        创建一个ModelAndView对象
        ModelAndView modelAndView = new ModelAndView();
//        设置模型数据将数据放入reqeuest中
        modelAndView.addObject("req", "通过ModeAndView是request");
//        设置视图名称,也就是跳转的页面
        modelAndView.setViewName("sucess");
        return modelAndView;

    }

    @RequestMapping("/c")
    public String testC(Model model) {
        System.out.println("使用Model传递本质是-----"+model.getClass().getName());
        model.addAttribute("req", "通过Model是request");
        return "sucess";
    }

    @RequestMapping("/d")
    public String testD(ModelMap modelMap) {
        System.out.println("使用ModelMap传递本质是-----"+modelMap.getClass().getName());
        modelMap.addAttribute("req", "通过ModelMap是request");
        return "sucess";
    }
    @RequestMapping("/e")
    public String testE(Map<String, Object> map){
        System.out.println("使用Map传递本质是-----"+map.getClass().getName());
        map.put("req", "通过Map是request");
        return "sucess";
    }

    @RequestMapping("/index")
    public String testindex(Model model) {
 
        return "index";
    }
}

然后看一下后台输出了什么:

在这里插入图片描述

其实本质上都是类:

org.springframework.validation.support.BindingAwareModelMap

那就可以BindingAwareModelMap上面三个有关系,截图看一下:

在这里插入图片描述

而BindingAwareModelMap与map的关系,需要看游戏modelMap代码了

在这里插入图片描述

session共享域

这个直接如下即可:

 @RequestMapping("/session")
//   可以通过HttpServletRequest得到session
//    public String testSession(HttpServletRequest    request) {
//        request.getSession().setAttribute("ses", "我是session");
    public String testSession(HttpSession    session) {
        session.setAttribute("ses", "我是session");
        return "sucess";
    }

当然sucess.html需要如下添加:

<p th:text="${session.ses}"></p>

application"共享域

代码如下:

  @RequestMapping("/application")
     public String testApplication(HttpServletRequest    request) {
        request.getServletContext().setAttribute("app", "我是application");
        return "sucess";
    }

然后再sucees.index添加:

<p th:text="${application.app}"></p>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一款基于 Python+flask 的态势感知系统(附完整源码)

一、开发 一个基于linux的态势感知系统&#xff0c;基于python和flask框架开发&#xff0c;项目文件目录如下&#xff1a; admin -核心算法 charts -图表生成 model -类 app.py -主文件 config.py -配置文件 install.py -安装文件 项目文件在文章结尾处~ 二、安装 1、…

矩池云搭建DeepLabV3Plus网络,预测无人机遥感语义分割数据集

先上效果图&#xff0c;效果是真不错呀&#xff01; 带大家复现这个过程 一、下载源码 代码下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1MkW7DOgNHD5h5sfXQ6L1HA 提取码&#xff1a;ynev 权重下载地址&#xff1a; 链接&#xff1a;https://pan.bai…

Java - 欢迎使用spring中的Base64Utils!

&#x1f335;如果项目技术栈中包含spring&#xff0c;同时又有Base64编码的需求&#xff0c;那么Base64Utils工具类将会是你的最好选择&#xff01;⤵️ 什么是Base64编码&#xff1f;⤵️ 基本转换针对URL的转换 &#xff08;/替换为-_&#xff09; Base64Utils公开的AP…

工业软件上云:有“数据之根”方能向阳生长

有人说&#xff0c;数字化时代&#xff0c;所有的事情都值得用云的方式重新做一遍。 深以为然。作为拥有全球工业门类最为齐全的国家&#xff0c;中国近年来正在从制造大国向制造强国迈进。随着《中国制造2025》国家战略的稳步推进&#xff0c;制造业的数字化转型和智能化升级…

【倒计时2天】CCIG文档图像智能分析与处理论坛开启直播预约,共探智能文档处理前沿技术

文档是人们在日常生活、工作中产生的信息的重要载体&#xff0c;各领域从业者几乎每天都要与金融票据、商业规划、财务报表、会议记录、合同、简历、采购订单等文档“打交道”。让计算机具备阅读、理解和解释这些文档图像的能力&#xff0c;在智能金融、智能办公、电子商务等许…

9:00面试,9:03就出来了 ,问的实在是太变态了···

从外包出来&#xff0c;没想到竟然死在了另一家厂子 自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以我也就忍了。没想到12月一纸通知&#xff0c;所有人都不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。 好在有个…

BRC20懂Web3?探寻宗教式社区建设- Yuga Labs「猿」宇宙案例解析

前言 早前&#xff0c;NFT 领域最强IP 缔造者Yuga Labs官宣&#xff1a;将基于Ordinal 协议在比特币区块链上推出NFT 系列「TwelveFold 」&#xff0c;为比特币NFT 生态添加了催化剂。所以以太坊失宠了吗&#xff1f;事实上&#xff0c;据欧科云链OKLink多链浏览器数据显示&am…

单精度浮点数与十进制数据相互转换

一、float基础&#xff1a; Float类型占4个字节,也就是32bit,其中最高位是符号位,2~9位是指数位,后边的23bit是数值位.如下所示 大部分数据的二进制形式都可以用科学计数法表示,即1.m*2^n这种形式,只要知道m和n,就能确定一个数值 二、小数位如何转变为二进制&#xff1a; 下面…

工业主板定制选型的要点都有哪些呢?

工业主板是工控机的核心部件。工控机通过工业主板将CPU等各种器件和外部设备有机地结合起来&#xff0c;形成一套完整的系统&#xff0c;因此工控机的整体运行速度和稳定性在相当程度上取决于工业主板的性能。工业主板应用范围广泛&#xff0c;使用环境复杂&#xff0c;因此用户…

键树_Trie树_介绍和C语言实现_20230511

键树_Trie树形式_树介绍及C语言实现 前言 上一篇提到键树有两种不同的表示方法&#xff0c;它们分别是双链树和Trie树&#xff0c;在上文中对双链树的数据结构以及在键树上的C语言实现做了详细的分析与讨论。如若键树中的结点的度较大&#xff0c;则采用Trie树结构较双链结构…

【软件工程】期末复习总结(通俗易懂,学不会来打我)

【软件工程】期末复习总结&#xff08;通俗易懂&#xff0c;学不会来打我&#xff09; 第一章 1.1 软件工程的发展历程 1.1.1 软件危机&#xff08;日子没法过了&#xff09; 软件危机&#xff08;Software Crisis&#xff09;是指在计算机软件开发、运行、维护和管理过程中…

126-Linux_git安装及使用

文章目录 一.git基本概念1.什么是git2.git的特点3.git工作流程4.文件的四种状态 二.git的安装1.在ubuntu上测试有没有安装2.使用命令 sudo apt install git 进行安装3.安装后查看版本,检查是否安装成功 三.git的使用1.git常用命令(1)创建一个目录(2)使用git init 命令将其变为一…

Netty编程入门超级详细,有这篇就足够了

目录 前言一、简介二、为什么使用Netty2.1 NIO的缺点2.2 Netty的优点 三、架构图四、永远的Hello Word4.1引入Maven依赖4.2 创建服务端启动类4.3 创建服务端处理器4.4 创建客户端启动类4.5 创建客户端处理器4.6 测试 五、Netty的特性与重要组件5.1 taskQueue任务队列5.2 schedu…

MyBatis的CRUD

0-基础知识 id&#xff1a;唯一标识 type&#xff1a;映射的类型&#xff0c;支持别名 java里的命名规则是驼峰&#xff0c;而sql里面是下划线&#xff0c;如何对数据库表的字段起别名&#xff1f; 数据库表的字段名称和实体类的属性名称 不一样&#xff0c;则不能自动封装数据…

算法套路十五——最长公共子序列LCS

算法套路十五——最长公共子序列LCS 算法示例&#xff1a;LeetCode1143. 最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&am…

Windows系统配置Anaconda虚拟环境,并安装Numpy、Scipy和Matplotlib等模块方法

有些项目不是必须在Ubuntu系统下进行的&#xff0c;对大部分人来说更熟悉Window系统&#xff0c;且查阅电脑中相关文件和使用微信更方便&#xff0c;因此记录一下Windows系统配置Anaconda虚拟环境步骤和安装Numpy、Scipy及Matplotlib等模块方法。 一、Anaconda安装 Anaconda可以…

异步电机速度估计-模型参考自适应MRAS法(补充)

导读&#xff1a;前期文章已经介绍过模型参考自适应MRAS进行速度估计的方法&#xff0c;本期文章主要是对MRAS实现的细节做一下补充。 若需要文章的仿真模型&#xff0c;关注微信公众号&#xff1a;浅谈电机控制&#xff0c;获取。 一、MRAS知识点回顾 1.1 基本原理 MRAS 模…

Calico的BGP打通Kubernetes网络和局域网

1、项目背景 随着云原生技术的不断发展&#xff0c;容器化应用已成为企业构建云原生架构的重要方式。而随着集群规模不断扩大&#xff0c;跨主机通信的需求也越来越重要。在 Kubernetes 集群中&#xff0c;Pod 是最小的调度和管理单位&#xff0c;而网络也是 Kubernetes 中最重…

双链表——“数据结构与算法”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰又回来了&#xff0c;到了好久没有更新的数据结构与算法专栏&#xff0c;最近确实发现自己有很多不足&#xff0c;需要学习的内容也有很多&#xff0c;所以之后更新文章可能不会像之前那种一天一篇或者一天两篇啦&…

浅谈 Node.js

Node.js 是什么&#xff1f; Node.js 是一个开源、跨平台的 JavaScript 运行时环境。 官网&#xff1a;https://nodejs.org/zh-cn 更多精彩内容&#xff0c;请微信搜索“前端爱好者“&#xff0c; 戳我 查看 。 Node.js ≠ JavaScript Node.js中&#xff0c;没有BOM和DOM。…