域对象共享数据~

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

使用ModelAndView时,可以使用其Model功能向请求域共享数据

使用View功能设置逻辑视图,但是控制器方法一定要将ModelAndView作为方法的返回值

举例如下所示:

创建控制器方法:

java 复制代码
package Controller.pojo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

@Controller
public class modelAndViewController {
    @RequestMapping(value = "/param/pojo")
    public String modelAndViewTesting(HttpServletRequest request){
        //request.setAttribute:是用来设置请求对象testScope的属性,该属性的值为hello,ModelAndView,此方法允许将数据从一个servlet传递到另一个servlet,或者从servlet传递到JSP页面,
        request.setAttribute("testScope","hello,ModelAndView");
        //获取请求对象testScope的属性
        System.out.println(request.getAttribute("testSCope"));
        return "success";
    }
}

index.html:

html 复制代码
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<h1>欢迎进入首页!</h1>
<a th:href="@{test/mdv}">通过modelandview向请求域共享数据</a>
</body>
</html>

success.html:

html 复制代码
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>成功页面</title>
</head>
<body>
<h1>success.html</h1>
<!--显示存储在请求作用域中的名为"${}"的变量的值 -->
<p th:text="${testRequestScope}"></p>
</body>
</html>

项目重新部署后,浏览器显示如下:

点击该超链接后跳转:

成功将请求对象名称为testScope的属性值显示出来!

使用Model向请求域共享数据:

创建控制器方法:

java 复制代码
package Controller.pojo;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class modelAndViewController {
    @RequestMapping("/test/model")
    public String modelTesting(Model model){
        model.addAttribute("testRequestScope","hello,Model");
        return "success";
    }
}

index.html:

html 复制代码
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<h1>欢迎进入首页!</h1>
<a th:href="@{test/model}">通过model向请求域共享数据</a>
</body>
</html>

success.html:

html 复制代码
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>成功页面</title>
</head>
<body>
<h1>success.html</h1>
<p th:text="${testRequestScope}"></p>
</body>
</html>

重新部署项目,浏览器显示如下:

点击超链接:

显示如下:

使用ModelMap向请求域共享数据:

创建控制器方法:

java 复制代码
package Controller.pojo;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class modelAndViewController {
    @RequestMapping("/test/modelMap")
    public String modelTesting(ModelMap modelMap){
        modelMap.addAttribute("testRequestScope","hello,ModelMap");
        return "success";
    }
}

index.html:

html 复制代码
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<h1>欢迎进入首页!</h1>
<a th:href="@{test/modelMap}">通过modelMap向请求域共享数据</a>
</body>
</html>

success.html:

html 复制代码
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>成功页面</title>
</head>
<body>
<h1>success.html</h1>
<p th:text="${testRequestScope}"></p>
</body>
</html>

重新部署项目,浏览器显示如下:

点击超链接:

显示如下:

使用Map向请求域共享数据:

创建控制器方法:

java 复制代码
package Controller.pojo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Map;

@Controller
public class modelAndViewController {
    @RequestMapping("/test/Map")
    public String modelTesting(Map<String,Object> map){
        map.put("testRequestScope","hello,map");
        return "success";
    }
}

index.html:

html 复制代码
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<h1>欢迎进入首页!</h1>
<a th:href="@{test/Map}">通过Map向请求域共享数据</a>
</body>
</html>

success.html:

html 复制代码
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>成功页面</title>
</head>
<body>
<h1>success.html</h1>
<p th:text="${testRequestScope}"></p>
</body>
</html>

重新部署项目,浏览器显示如下:

点击超链接:

显示如下:

model,modelMap以及Map三者之间的关系:

三者通过getClass().getName()调用方法,其结果都是org.springframework.validation.support.BindingAwareModelMap,由此我们可以得知在底层中,这三者的形参最终都是通过BindingAwareModelMap创建的,其三者的关系如下所示:

java 复制代码
public class BindingAwareModelMap extends ExtendedModelMap {
public class ExtendedModelMap extends ModelMap implements Model {
public class ModelMap extends LinkedHashMap<String, Object> {

向会话域和应用域 共享数据:

控制器方法:

java 复制代码
package Controller.pojo;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;


@Controller
public class shareDataController {
    @RequestMapping("/test/Session")
    public String sessionTesting(HttpSession httpSession){
        httpSession.setAttribute("testRequestScope","hello,Session");
        return "success";
    }
    @RequestMapping("/test/Application")
    public String applicationTesting(HttpSession httpSession){
        ServletContext servletContext=httpSession.getServletContext();
        servletContext.setAttribute("testRequestScope","hello,Application");
        return "success";
    }
}

index.html:

html 复制代码
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>
<h1>欢迎进入首页!</h1>
<a th:href="@{test/Session}">测试向会话域中共享数据</a><br>
<a th:href="@{test/Application}">测试向应用域中共享数据</a>
</body>
</html>

success.html:

html 复制代码
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>成功页面</title>
</head>
<body>
<h1>success.html</h1>
<p th:text="${testRequestScope}"></p>
<!--获取session和application中的共享数据 -->
<p th:text="${session.testRequestScope}"></p>
<p th:text="${application.testRequestScope}"></p>
</body>
</html>

项目

将当前的地址复制,关闭浏览器后,重新打开,如下所示,我们会发现session共享的数据已经不存在了

不关闭浏览器,选择model/modelMap/Map中的任意一种向请求域共享数据,再重新部署项目(重新部署项目相当于重启服务器),如下所示:

上面我们说到session是在一次会话中有效,只要会话没有关闭,那么共享的数据就不会消失,但是这里为什么消失了呢?

原因是与IDE有关,如下所示:

勾选该选项的作用是:当服务器关闭不清空session

相关推荐
.痞老板.5 分钟前
java ee--计算机是如何工作的
java·开发语言·java-ee
张彦峰ZYF15 分钟前
升级了不等于变好了:AI回归测试的固定评测集、版本对比、质量阈值与CI门禁
人工智能·后端·模型或提示词升级·语言模型没有编译器与确定性输出·总体、切片与回退清单·红线、护栏与目标·ci门禁把判定写进合并路径
青梅味猪大肠15 分钟前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统
CoderYanger16 分钟前
Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)
java·数据库·spring·面试·职场和发展·java-ee·mybatis
程序员沉梦听雨19 分钟前
【搜索引擎】Kibana使用指南
java·后端·学习笔记
Cosolar1 小时前
极简智库(MiniDocs):docsify、VitePress、Notion 等知识库搭建服务的完美替代
前端·后端·架构
XLYcmy1 小时前
信息检索报告数字经济赋能城市低碳治理的路径研究——基于“传统数据库 + 生成式人工智能”双轮驱动的检索实践 检索实施与结果分析 Web of Science
数据库·ai·llm·prompt·ssci·deepseek·wos
Decay__1 小时前
21_MySQL 优化案例集 —— 慢 SQL 优化、索引重构与参数调整收益对比
运维·数据库·sql·mysql·架构
Goboy1 小时前
夯爆了,我被一个一句话接入的免费可观测平台策反了,那一刻我决定放弃用了3年的Prometheus
后端·docker·kubernetes
独隅1 小时前
WebStorm macOS 安装部署与高效调优实战指南
ide·macos·webstorm