【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 ...
随机推荐
- 【剑指offer】73.数组中出现次数超过一半的数字
73.数组中出现次数超过一半的数字 知识点:数组:哈希:占领地思想: 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4 ...
- IDEA上搭建spark开发
IDEA上搭建spark开发环境 我本地系统是windows10,首先IDEA上要安装了scala插件. 1.下载winutils.exe文件 winutils.exe是在Windows系统上需要的h ...
- 高性能内存图数据库RedisGraph(三)
这篇文章,我将介绍截止目前,RedisGraph的最新版本(v2.4)对Cypher语言的支持情况. 1.模式(patterns) RedisGraph已支持Cypher中所有的模式. 2.类型(ty ...
- debain9显卡
# Debian 9 "Stretch" deb http://httpredir.debian.org/debian/ stretch main contrib non-free ...
- r正则表达式
/t 制表符. /n 新行. . 匹配任意字符. | 匹配表达式左边和右边的字符. 例如, "ab|bc" 匹配 "ab" 或者 "bc". ...
- Spring Cloud Alibaba基础教程:Sentinel
随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制.熔断降级.系统自适应保护等多个维度来保障微服务的稳定性. ...
- 大数据学习(11)—— Hive元数据服务模式搭建
这一篇介绍Hive的安装及操作.版本是Hive3.1.2. 调整部署节点 在Hadoop篇里,我用了5台虚拟机来搭建集群,但是我的电脑只有8G内存,虚拟机启动之后卡到没法操作,把自己坑惨了. Hive ...
- Linux的链接(入门)
Linux的链接分为两种:硬链接和软链接 硬链接:如果B是A的硬链接,那么B和A指向同一个文件,但是删除A并不会影响B->允许一个文件有多个路径 软链接:类似Windows下的快捷方式,删除原文 ...
- 并发编程——Java线程的6种状态及切换
前言 本次主要分享一下Java线程的六种状态及其转换. 如果对于线程的创建方式不太了解,推荐观看并发编程--认识java里的线程 线程的状态及其转换 操作系统线程的五种状态 新建(NEW) 就绪(RU ...
- 用 getchar putchar 来输入和接收 但是要清空缓冲区
1 //用 getchar putchar 来输入和接收 但是要清空缓冲区 2 3 #include <stdio.h> 4 int main() 5 { 6 char ch1,ch2; ...