【SpringMVC】域对象共享数据
使用ModelAndView向request域对象共享数据
index.html
<a th:href="@{/testModelAndView}">使用ModelAndView</a>

控制器
/**
* ModelAndView有Model和View的功能
* Model主要用于向请求域共享数据
* View主要用于设置视图,实现页面跳转
*/
@RequestMapping("/testModelAndView")
public ModelAndView success(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("username","gonghr"); //向请求域共享数据
modelAndView.setViewName("success"); //设置视图名称,实现页面跳转
return modelAndView; //返回
}
success.html
sucess
<p th:text="${username}"></p>

使用Model向request域对象共享数据
index.html
<a th:href="@{/testModel}">使用Model</a> <br>
控制器
@RequestMapping("/testModel")
public String testModel(Model model){
model.addAttribute("company","JLU");
return "success";
}
success.html
sucess
<p th:text="${company}"></p> <br>

使用map向request域对象共享数据
index.html
<a th:href="@{/testMap}">使用Map</a> <br>
控制器
@RequestMapping("/testMap")
public String testMap(Map<String, Object> map){
map.put("age","Nineteen");
return "success";
}
sucess.html
sucess
<p th:text="${age}"></p> <br>

使用ModelMap向request域对象共享数据
index.html
<a th:href="@{/testModelMap}">使用ModelMap</a> <br>
控制器
@RequestMapping("/testModelMap")
public String testModelMap(ModelMap modelMap){
modelMap.addAttribute("major","software engineering");
return "success";
}
success.html
<p th:text="${major}"></p> <br>

Model、ModelMap、Map的关系
经过测试发现:除了ModelAndView的实现类是ModelAndView,Model、Map和ModelMap 的实现类都是BindingAwareModelMap。
Model、ModelMap、Map类型的参数其实本质上都是 BindingAwareModelMap 类型的
class of ModelAndView: class org.springframework.web.servlet.ModelAndView
class of Model: class org.springframework.validation.support.BindingAwareModelMap
class of Map: class org.springframework.validation.support.BindingAwareModelMap
class of ModelMap: class org.springframework.validation.support.BindingAwareModelMap
阅读ModeAndView的源码可以发现,ModeAndView和ModelMap是组合关系。下面是ModeAndView的部分源码。
public class ModelAndView {
@Nullable
private ModelMap model;
public ModelAndView() {
}
public ModelMap getModelMap() {
if (this.model == null) {
this.model = new ModelMap();
}
return this.model;
}
public ModelAndView addObject(String attributeName, @Nullable Object attributeValue) {
this.getModelMap().addAttribute(attributeName, attributeValue);
return this;
}
当ModeAndView调用addObject()方法时其实是调用ModelMap的addAttribute()方法,本质上与ModelMap是一样的。
各个类之间的关系如下:
public interface Model{}
public class ModelMap extends LinkedHashMap<String, Object> {}
public class ExtendedModelMap extends ModelMap implements Model {}
public class BindingAwareModelMap extends ExtendedModelMap {}

四种方式本质上都是调用的Model接口中的addAttribute方法
向session域共享数据
index.html
<a th:href="@{/testSession}">使用Session</a> <br>
控制器
@RequestMapping("/testSession")
public String testSession(HttpSession session){
session.setAttribute("message","session scope");
return "success";
}
success.html
<p th:text="${session.message}"></p> <br>

向application域共享数据
index.html
<a th:href="@{/testApplication}">使用Application</a> <br>
控制器
@RequestMapping("/testApplication")
public String testApplication(HttpSession session){
ServletContext application = session.getServletContext();
application.setAttribute("testApplication","hello,application");
return "success";
}
success.html
<p th:text="${application.testApplication}"></p> <br>

【SpringMVC】域对象共享数据的更多相关文章
- struts2开发流程及配置,域对象对数据存储的3种方式
一.开发流程 1)引入 jar 包,其中必须引入的有(我是用的struts是2.3.32) commons-fileupload-1.3.2.jar |文件上传下载commons-io-2.2 ...
- java多线程学习-多个线程访问对象共享数据的方式
public class MulitThreadShareData { public static void main(String[] args) { final ShareData1 data1 ...
- SpringMVC从Request域中获取数据
SpringMVC从Request域中获取数据的三种方式 SpringMVC环境自行搭建, 约定存在如下目录和文件:/WEB-INF/pages/success.jsp 方式一:传入Model对象 前 ...
- 无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)
1.listview入门,自定义的数据适配器 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/and ...
- 【转】asp.net中利用session对象传递、共享数据[session用法]
来自:http://blog.unvs.cn/archives/session-transfer-method.html 下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值 ...
- asp.net中利用session对象传递、共享数据[session用法]
下面介绍Asp.net中利用session对象传递.共享数据用法: 1.传递值: 首先定义将一个文本值或单独一个值赋予session,如下: session[“name”]=textbox1.text ...
- Struts2第四篇【请求数据自动封装、Action得到域对象】
前言 前三篇的Struts博文基本把Struts的配置信息讲解完了-..本博文主要讲解Struts对数据的处理 一般地,我们使用Servlet的时候都是分为几个步骤的: 得到web层的数据.封装数据 ...
- redis 系列15 数据对象的(类型检查,内存回收,对象共享)和数据库切换
一. 概述 对于前面的五章中,已清楚了数据对象的类型以及命令实现,其实还有一种数据对象为HyperLogLog,以后需要用到再了解.下面再了解类型检查,内存回收,对象共享,对象的空转时长. 1.1 ...
- 项目搭建系列之三:SpringMVC框架下使用Ehcache对象、数据缓存
注明:该文章为以前写的文章,这里只更改了标题,无GitHub源码下载. 一.准备工作 如果已经成功搭建SpringMVC环境,那么就可以进入Ehcache的准备工作了.1.下载jar包 Ehca ...
随机推荐
- Python基础之魔术方法(控制属性的访问和设置)
# 魔术方法--常规方法# 1. __int__ 构造函数# 2. __new__ 在类实例之前就创建了# 3. __iter__ 迭代器# 4. __del__ 析构方法,用来清除释放的对象内存# ...
- 【洛谷P4933 大师】动态规划
题目描述 ljt12138首先建了n个特斯拉电磁塔,这些电塔排成一排,从左到右依次标号为1到n,第i个电塔的高度为h[i]. 建筑大师需要从中选出一些电塔,然后这些电塔就会缩到地下去.这时候,如果留在 ...
- 货币兑换问题(动态规划法)——Python实现
# 动态规划法求解货币兑换问题 # 货币系统有 n 种硬币,面值为 v1,v2,v3...vn,其中 v1=1,使用总值为money的钱与之兑换,求如何使硬币的数目最少,即 x1,x2,x3... ...
- PHP5.6.6上运行 ecshop 2.7.3常见问题处理
ecshop在在PHP5.6.6版本以后,有了很多细微的变化.而ECSHOP官方更新又太慢,发现这些问题后也不及时升级,导致用户安装使用过程中错误百出. 整理一下我遇到的问题希望对你们能有些帮组也为了 ...
- Super-Mario-Host(超级玛丽)靶机
仅供个人娱乐 靶机百度云下载 链接:https://pan.baidu.com/s/13l1FUgJjXArfoTOfcmPsbA 提取码:a8ox 一.主机发现 arp-scan -l 二.漏洞扫 ...
- 几篇关于RGBD语义分割文章的总结
最近在调研3D算法方面的工作,整理了几篇多视角学习的文章.还没调研完,先写个大概. 基于RGBD的语义分割的工作重点主要集中在如何将RGB信息和Depth信息融合,主要分为三类:省略. 目录 ...
- git合作开发流程
一.创建项目与管理 创建项目和管理项目都是管理账号需要做的事情,如果只是合作开发不进行管理,只需要浏览第二部分的内容即可. 1.创建项目 登录代码托管网站,点击添加项目,如下图所示: 填写相应的项目信 ...
- netty系列之:基于流的数据传输
目录 简介 package和byte 手动组合 Byte的转换类 ReplayingDecoder 总结 简介 我们知道由两种数据的传输方式,分别是字符流和字节流,字符流的意思是传输的对象就是字符串, ...
- kali linux重启网卡失败:Job for networking.service failed because the control process exited with error code. See "systemctl status networking.service" and "journalctl -xe" for details. 问题排查
linux菜鸡的时候,总是为了配置网络而烦恼,重启网卡的原因有很多,我这次是因为配置了固定IP[使用第三方工具连接]所以需要重启网卡,出现 Job for networking.service fai ...
- Windows协议 NTLM篇
NTLM 基础 介绍 LM Hash & NTLM Hash Windows本身是不会存储明文密码的,只保存密码的hash 其中本机用户的密码hash是放在本地的SAM文件里面,域内用户的密码 ...