Spring MVC域对象共享数据

news2024/12/25 9:34:14

在Spring MVC中,域对象(Domain Object)通常指的是与业务逻辑相关的模型对象,它们代表了应用程序中的核心数据结构。例如,在一个电商应用中,Product、User、Order等类可以被视为域对象。这些对象通常与数据库中的表相对应,并包含业务逻辑和数据验证等功能。

使用ServletAPI向request域对象共享数据

在Spring MVC中,使用HttpServletRequest对象可以直接操作请求范围的属性。通过request.setAttribute()方法设置的属性可以在同一请求的后续处理过程中使用,但它们不会在重定向或后续请求中保持。

@RequestMapping("/testServletAPI")
public String testServletAPI(HttpServletRequest request){
    request.setAttribute("testScope", "hello,servletAPI");
    return "success";
}

在这个例子中,testScope属性被设置为"hello, servletAPI",并且可以在返回的视图中访问。假设你有一个名为success.jsp的视图,你可以在该视图中使用EL表达式来访问这个属性:

<html>
<body>
    <h1>${testScope}</h1> <!-- 输出: hello, servletAPI -->
</body>
</html>

在这里插入图片描述

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

在Spring MVC中,使用ModelAndView对象可以方便地将数据传递到视图中。ModelAndView不仅可以设置模型数据,还可以指定视图名称。通过这种方式,你可以将数据放入请求域中,以便在视图中使用。

    @RequestMapping("/testModelAndView")
    public ModelAndView testModelAndView(){
        /**
         * ModelAndView有Model和View的功能
         * Model主要用于向请求域共享数据
         * View主要用于设置视图,实现页面跳转
         */
        ModelAndView mav = new ModelAndView();
        //向请求域共享数据
        mav.addObject("testScope1", "hello,ModelAndView");
        //设置视图,实现页面跳转
        mav.setViewName("success");
        return mav;
    }
<h5>/testModelAndView</h5>
<p th:text="${testScope1}"></p>
<hr>

在这里插入图片描述

也可以通过这种方式

   /**
     * ModelAndView有Model和View的功能
     * Model主要用于向请求域共享数据
     * View主要用于设置视图,实现页面跳转
     */
    @RequestMapping("/test/mvc")
    public ModelAndView testMAV(){
        ModelAndView mav = new ModelAndView();
        //像请求域中共享数据
        mav.addObject("name", "miaow");
        //设计逻辑视图,就是跳转的页面
        mav.setViewName("success");
        return mav;
    }
<h5>/test/mvc</h5>
<a th:href="@{/test/mvc}">获取ModelAndView中的请求域中共享数据 </a>
<p th:text="${name}"></p>
<hr>

在这里插入图片描述

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

在Spring MVC中,使用Model对象可以方便地向请求域共享数据。Model是一个用于传递数据到视图的接口,允许你将属性添加到请求范围中。

    @RequestMapping("/testModel")
    public String testModel(Model model){
        model.addAttribute("testScope3", "hello,Model");
        return "success";
    }
<h5>/testModel</h5>
<p th:text="${testScope3}"></p>
<hr>

在这里插入图片描述

使用map向request域对象共享数据

在Spring MVC中,你可以使用Map对象向请求域共享数据。通过将数据放入Map中,你可以将多个属性传递到视图中。

    @RequestMapping("/testMap")
    public String testMap(Map<String, Object> map){
        map.put("testScope4", "hello,Map");
        return "success";
    }
<h5>/testMap</h5>
<p th:text="${testScope4}"></p>
<hr>

在这里插入图片描述

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

在Spring MVC中,ModelMap是一个用于传递模型数据到视图的对象。它是Model接口的一个实现,允许你将属性添加到请求域中。

    @RequestMapping("/testModelMap")
    public String testModelMap(ModelMap modelMap){
        modelMap.addAttribute("testScope5", "hello,ModelMap");
        return "success";
    }
<h5>/testModelMap</h5>
<p th:text="${testScope5}"></p>
<hr>

在这里插入图片描述

向session域共享数据

在Spring MVC中,向会话(session)域共享数据可以通过使用@SessionAttributes注解或直接使用HttpSession对象来实现。

@SessionAttributes

@SessionAttributes注解可以将特定的模型属性存储在HTTP会话中,这样在用户的多个请求之间可以共享数据。

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

@Controller
@SessionAttributes("user")
public class UserController {

    @ModelAttribute("user")
    public User createUserModel() {
        return new User(); // 创建一个新的User对象
    }

    @RequestMapping("/saveUser")
    public String saveUser(@ModelAttribute("user") User user, Model model) {
        user.setName("John Doe"); // 设置用户属性
        model.addAttribute("message", "User saved successfully!");
        return "success"; // 返回视图名称
    }

    @RequestMapping("/showUser")
    public String showUser(@ModelAttribute("user") User user, Model model) {
        model.addAttribute("message", "Current User: " + user.getName());
        return "success"; // 返回视图名称
    }
}
public class User {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

创建一个名为success.html的Thymeleaf模板文件,用于显示传递的数据。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Session Example</title>
</head>
<body>
    <h1>Response from Controller</h1>
    <p th:text="${message}">This will be replaced by the message value.</p>
</body>
</html>

使用HttpSession

你也可以直接使用HttpSession对象来共享数据。

    @RequestMapping("/testSession")
    public String testSession(HttpSession session){
        session.setAttribute("testSessionScope", "hello,session");
        return "success";
    }
<h5>/testSession</h5>
<p th:text="'Hello,session的值 ' + ${session.testSessionScope} + '!'"></p>
<hr>

在这里插入图片描述

向application域共享数据

在Spring MVC中,向应用程序(application)域共享数据通常是通过ServletContext来实现的。应用程序域的数据在整个应用程序的生命周期内都是可用的,适合于存储全局共享的数据。

    @RequestMapping("/testApplication")
    public String testApplication(HttpSession session){
        ServletContext application = session.getServletContext();
        application.setAttribute("testApplicationScope", "hello,application");
        return "success";
    }
<h5>/testApplication</h5>
<p th:text="'Hello,application的值 ' + ${application.testApplicationScope} + '!'"></p>

在这里插入图片描述

附上控制层代码:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>成功跳转页面</title>
</head>
<body>

<h1>success</h1>

<hr>
<h1>Response from Controller</h1>
<h5>/testServletAPI</h5>
<p th:text="${testScope}">This will be replaced by the testScope value.</p> <!-- 输出: hello, Thymeleaf! -->
<hr>

<h5>/testModelAndView</h5>
<p th:text="${testScope1}"></p>
<hr>

<h5>/test/mvc</h5>
<a th:href="@{/test/mvc}">获取ModelAndView中的请求域中共享数据 </a>
<p th:text="${name}"></p>
<hr>

<h5>/testModel</h5>
<p th:text="${testScope3}"></p>
<hr>

<h5>/testMap</h5>
<p th:text="${testScope4}"></p>
<hr>

<h5>/testModelMap</h5>
<p th:text="${testScope5}"></p>
<hr>

<h5>/testSession</h5>
<p th:text="'Hello,session的值 ' + ${session.testSessionScope} + '!'"></p>
<hr>

<h5>/testApplication</h5>
<p th:text="'Hello,application的值 ' + ${application.testApplicationScope} + '!'"></p>


</body>
</html>

@Controller
public class FieldController {

    @RequestMapping("/testServletAPI")
    public String testServletAPI(HttpServletRequest request) {
        request.setAttribute("testScope", "hello, Thymeleaf!");
        return "success"; // 返回视图名称
    }

    @RequestMapping("/testModelAndView")
    public ModelAndView testModelAndView(){
        /**
         * ModelAndView有Model和View的功能
         * Model主要用于向请求域共享数据
         * View主要用于设置视图,实现页面跳转
         */
        ModelAndView mav = new ModelAndView();
        //向请求域共享数据
        mav.addObject("testScope1", "hello,ModelAndView");
        //设置视图,实现页面跳转
        mav.setViewName("success");
        return mav;
    }


    /**
     * ModelAndView有Model和View的功能
     * Model主要用于向请求域共享数据
     * View主要用于设置视图,实现页面跳转
     */
    @RequestMapping("/test/mvc")
    public ModelAndView testMAV(){
        ModelAndView mav = new ModelAndView();
        //像请求域中共享数据
        mav.addObject("name", "miaow");
        //设计逻辑视图,就是跳转的页面
        mav.setViewName("success");
        return mav;
    }


    @RequestMapping("/testModel")
    public String testModel(Model model){
        model.addAttribute("testScope3", "hello,Model");
        return "success";
    }


    @RequestMapping("/testMap")
    public String testMap(Map<String, Object> map){
        map.put("testScope4", "hello,Map");
        return "success";
    }

    @RequestMapping("/testModelMap")
    public String testModelMap(ModelMap modelMap){
        modelMap.addAttribute("testScope5", "hello,ModelMap");
        return "success";
    }

    @RequestMapping("/testSession")
    public String testSession(HttpSession session){
        session.setAttribute("testSessionScope", "hello,session");
        return "success";
    }

    @RequestMapping("/testApplication")
    public String testApplication(HttpSession session){
        ServletContext application = session.getServletContext();
        application.setAttribute("testApplicationScope", "hello,application");
        return "success";
    }
}

总结

  • Request域:适合在单个请求中共享数据,使用Model、ModelMap、Map或ModelAndView。
  • Session域:适合在多个请求之间共享数据,使用@SessionAttributes或HttpSession。
  • Application域:适合在整个应用程序中共享数据,使用ServletContext。

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

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

相关文章

Pod基础使用

POD基本操作 1.Pod生命周期 在Kubernetes中&#xff0c;Pod的生命周期经历了几个重要的阶段。下面是Pod生命周期的详细介绍&#xff1a; Pending&#xff08;待处理&#xff09;: 调度: Pod被创建后&#xff0c;首先进入“Pending”状态。此时&#xff0c;Kubernetes的调度器…

设计模式24-命令模式

设计模式24-命令模式 写在前面行为变化模式 命令模式的动机定义与结构定义结构 C 代码推导优缺点应用场景总结补充函数对象&#xff08;Functors&#xff09;定义具体例子示例&#xff1a;使用函数对象进行自定义排序代码说明输出结果具体应用 优缺点应用场景 命令模式&#xf…

查看 CUDA 和 cuDNN 版本

在安装 onnxruntime-gpu 选择版本时需要查看本机 CUDA 和 cuDNN 版本。 查看 CUDA 和 cuDNN 版本 import platform import torchprint("python.version:", platform.python_version()) print("torch.version:", torch.__version__) print("CUDA.vers…

汽车管理 API 接口:开启高效车辆运营新时代

API&#xff08;Application Programming Interface&#xff09;是一种接口&#xff0c;用于不同软件之间的通信。在汽车管理领域&#xff0c;API的应用可以帮助提升车辆运营的效率&#xff0c;让车主和车辆管理者更方便地获取车辆相关信息&#xff0c;进行保养和维修等工作。本…

fastadmin api中无法获取用户信息

控制器使用_initialize方法时&#xff0c;要增加 parent::_initialize(); 这行代码&#xff0c;否则会出现获取不到用户信息的问题&#xff1a; public function _initialize() {// 你的逻辑内容// ...// endparent::_initialize(); }

Chapter 01 Vue入门

前言 Vue 是一个框架&#xff0c;也是一个生态&#xff0c;其功能覆盖了大部分前端开发常见的需求。本文详细讲解了 Vue 的基本概念以及 Vue 开发者工具的安装。 一、Vue简介 ①定义 Vue 是一款用于构建用户界面的渐进式框架。它基于标准 HTML、CSS 和 JavaScript 构建&…

基于RDMA技术的Mayastor解决方案

1. 方案背景和挑战 1.1. Mayastor简介 OpenEBS是一个广受欢迎的开源云原生存储解决方案&#xff0c;托管于CNCF&#xff08;云原生计算基金会&#xff09;之下&#xff0c;旨在通过扩展Kubernetes的能力&#xff0c;为有状态应用提供灵活的持久性存储。Mayastor是OpenEBS项目…

maxscale

入门 官网&#xff1a;https://mariadb.com/kb/en/maxscale/ 开发语言&#xff1a;C 是否支持分片&#xff1a;不支持 支持的数据库&#xff1a;MySQL/Mariadb 路由规则&#xff1a;事务包裹的SQL会全部走写库、没有事务包裹SQL读写库通过设置Hint实现。其它功能通过配置文件实…

微服务通信

1、Feign远程调用 Feign是Spring Cloud提供的⼀个声明式的伪Http客户端&#xff0c; 它使得调⽤远程服务就像调⽤本地服务⼀样简单&#xff0c; 只需要创建⼀个接⼝并添加⼀个注解即可。 Nacos很好的兼容了Feign&#xff0c; Feign 默认集为Ribbon&#xff0c; 所以在Nacos下使…

M8020A J-BERT 高性能比特误码率测试仪

M8020A 比特误码率测试仪 J-BERT M8020A 高性能 BERT 产品综述 Keysight J-BERT M8020A 高性能比特误码率测试仪能够快速、准确地表征传输速率高达 16 或 32 Gb/s 的单通道和多通道器件中的接收机。 M8020A 综合了更广泛的功能&#xff0c;可以简化您的测试系统。 自动对信…

AGV导航方法大盘点:3大类,12小类

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 在自动化物流领域&#xff0c;自动导引车&#xff08;AGV&#xff09;扮演着至关重要的角色。它们不仅能够提高搬运效率&#xff0c;还能在各种环境中准确无误地完成任务。 而这一切的…

KVM虚拟化之命令行界面创建KVM虚拟机

环境&#xff1a;CentOS8 安装所需软件包 yum groupinstall -y "Virtualization*" 上传一个ISO镜像 使用指令创建KVM虚拟机 给KVM虚拟机创建一个磁盘 -f:指定磁盘类型为qcow2 使用指令创建一个虚拟机 virt-install \ --nameCentos-2 \ --vcpu 1 \ --memory 2048 \ -…

【SpringCloud】(一文通)服务注册/服务发现-Eureka

目 录 一. 背景1.1 问题描述1.2 解决思路1.3 什么是注册中心1.4 CAP理论1.5 常见的注册中心 二. Eureka 介绍三. 搭建Eureka Server3.1 创建 Eureka-server 子模块3.2 引入 eureka-server 依赖3.3 项目构建插件3.4 完善启动类3.5 编写配置文件3.6 启动服务 四. 服务注册4.1 引入…

Docker基础概述、Docker安装、Docker镜像加速、Docker镜像指令

1.为什么学docker 开发环境与测试环境不同&#xff0c;导致错误 因此docker提供解决方法———系统平滑移植&#xff0c;容器虚拟化技术 将代码与软件与配置文件 打包成一个镜像 2.docker的历练 创建一个开发环境内成为镜像文件再用docker使用镜像 3.什么是docker Docke…

泛型篇(Java - 泛型机制)(持续更新迭代)

目录 私聊 一、什么是泛型&#xff0c;泛型有什么用&#xff0c;为什么要用 1. 说法一 1.1 什么是泛型 1.2 泛型的使用 1.3 为什么要用泛型 2. 说法二 2.1 什么是泛型&#xff0c;泛型有什么用&#xff0c;为什么要用 2.2 怎么使用泛型&#xff0c;泛型可以作用在什么…

私有方法加事务注解会导致事务失效

这里idea其实已经提醒了使用事务不能用私有方法&#xff0c;这其实是个常见问题&#xff0c;这里主要就加深印象

XSS复现

目录 XSS简单介绍 一、反射型 1、漏洞逻辑&#xff1a; 为什么有些标签可以触发&#xff0c;有些标签不能触发 可以触发的标签 不能触发的标签 为什么某些标签能触发而某些不能 二、DOM型 1、Ma Spaghet! 要求&#xff1a; 分析&#xff1a; 结果&#xff1a; 2、J…

计算xpclr

1.conda安装xpclr 首先安装流程很轻松 conda create -n xpclr -c bioconda xpclr conda activate xpclr xpclr -h 2.按照要求准备文件 XPCLR - 简书 (jianshu.com) 根据教程准备文件&#xff0c;vcf&#xff0c;计算好的map&#xff0c;以及样本文件txt 其实官网也有介绍…

django学习入门系列之第九点《案例 Flask+MySQL新增用户》

文章目录 1 新增用户往期回顾 1 新增用户 from flask import Flask, render_template, request import pymysqlapp Flask(__name__)# 创建了网址 /nima和函数index的对应关系 # 以后用户在浏览器上访问/nima自动运行函数 app.route("/nima", methods[GET, POST]) d…

最小区间00

题目链接 最小区间00 题目描述 注意点 -10^5 < nums[i][j] < 10^5nums[i] 按非递减顺序排列找到一个 最小 区间&#xff0c;使得 k 个列表中的每个列表至少有一个数包含在其中 解答思路 参照题解&#xff0c;根据滑动窗口完成本题首先将所有的元素都提取出来并按升序…