域对象的共享数据

什么是域对象

域对象主要用于web应用中,负责存储数据,通俗的讲就是这个对象本身存储一定范围内的所有数据,通过他就能获取和存储数据,可以理解为万能的一个属性,只要调用他就可以获得这个范围(域)内的想要的数据,可以修改删除数据,当然也可以给这个域添加数据

域对象分类

根据作用域的不同分类:

  • PageContext 存在于jsp文件中,自己本身作为域对象可以存储和查询修改数据,但是目前基本不在应用jsp,不做过多讲解
  • HttpServletRequest请求域对象,只有一次请求,所以相同的请求域可以用来存储数据并传输域对象共有的方法
  • session域对象,在同一个客户访问服务器时,如果发生了响应重定向,则之前的request域中存在的数据就会丢失,所以出现session域对象,用来记录是否是同一个客户进行访问,进行会话跟踪,并进行数据存储和获取
  • ServletContext域 公共接口类型,作用域整个web项目,用来获取和存储web中的数据,ServletContext接口对象是随着web项目的加载而创建的,每个web项目都有一个ServletContext,因此在进行不同的Servlet对象之间传递数据时可以使用ServletContext域对象

域对象共享数据:

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

 

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

 

就是转发

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

@RequestMapping("/testModelAndView) public ModelAndView testModelAndView(){ ModelAndView mav = new ModelAndView(); mav.addObject("testScope","hello,ModelAndView"); mav.setViewName("success"); return mav; }

 

3、使用model向request域对象共享数据

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

 

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

@RequestMapping("/testMap) public String testMao(Map<string,object> map){ map.put("testScope","hello,Map"); </string,object>return "success"; }

 

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

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

 

Model、ModelMap、Map类型的参数其实质上都是BindingAwareModelMap类型

public interface Model{}public class ModelMap extends LinkedHashMap<String,Object>{}public class ExtendedModelMap extends ModelMap implements Model{}public class BindingAwareModelMap extends ExtendedModelMap{}

 

控制器执行后都会返回一个统一的ModelAndView的对象,所以SpringMVC建议的是使用ModelAndView,同时,对于原生的ServletAPI不建议使用

6、向session域对象共享数据

1
2
3
4
5
@RequestMapping("/testSession")
public String testSession(HttpSession session){
    session.setAttribute("testScope","hello,Session");
    return "success";
}

  

在Thymeleaf中,对于session的数据获取应该为:

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

  

向application域共享数据(ServletContext)

1
2
3
4
5
6
@RequestMapping("/testApplication")
public String testApplication(HttpSession session)
    ServletContext application = session.getServletContext();
    application.setAttribute("testScope","hello,application");
    return "success";
}

  

在Thymeleaf中,对于application的数据获取应该为:

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

  


__EOF__

本文作者夜雨闻铃
本文链接https://www.cnblogs.com/sugeek/articles/16918988.html
关于博主:编程菜鸟一只,希望每个今天胜过昨天,一步步走向技术的高峰!
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   sugeek  阅读(71)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示