SpringMVC(十一):SpringMVC 处理输出模型数据之SessionAttributes
Spring MVC提供了以下几种途径输出模型数据:
1)ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据;
2)Map及Model:处理方法入参为org.springframework.ui.Model、org.springframework.ui.ModelMap或java.util.Map时,处理方法返回时,Map中的数据会自动被添加到模型中;
3)@SessionAttributes:将模型中的某个属性暂存到HttpSeession中,以便多个请求之间可以共享这个属性;
4)@ModelAttribute:方法入参标注该注解后,入参的对象就会放到数据模型中。
@SessionAttributes
1)若希望在多个请求之间共享某个模型属性数据,则可以在控制器类上标注@SessionAttributes,Spring MVC将在模型中对应的属性暂存到HttpSession中。
测试1:
在TestModelData.java中添加方法testSessionAttribute:
@RequestMapping("/testSessionAttribute")
public String testSessionAttribute(Map<String, Object> map) {
Account account = new Account("user1", "pwd123", "2018-01-07", "127.0.0.1");
map.put("account", account);
System.out.println("testSessionAttribute:"+map);
return SUCCESS;
}
Account.java
package com.dx.springlearn.entities;
public class Account {
private String username;
private String password;
private String registerDate;
private String registerIP;
public Account() {
}
public Account(String username, String password, String registerDate, String registerIP) {
super();
this.username = username;
this.password = password;
this.registerDate = registerDate;
this.registerIP = registerIP;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRegisterDate() {
return registerDate;
}
public void setRegisterDate(String registerDate) {
this.registerDate = registerDate;
}
public String getRegisterIP() {
return registerIP;
}
public void setRegisterIP(String registerIP) {
this.registerIP = registerIP;
}
@Override
public String toString() {
return "Account [username=" + username + ", password=" + password + ", registerDate=" + registerDate
+ ", registerIP=" + registerIP + "]";
}
}
修改index.jsp,添加链接HTML:
<a href="testSessionAttribute">test SessionAttribute</a>
修改/WEB-INF/views/success.jsp,添加HTML脚本:
SUCCESS PAGE<br>
testSessionAttribute request:${requestScope.account.username }<br>
testSessionAttribute session:${sessionScope.account.username }<br>
此时访问index.jsp,并点击链接后条状到success.jsp也页面显示信息如下:

测试2:
此时默认情况下,并没有把account实体存放到HttpSession中,如何才能实现呢?-------修改TestModelData.java,在TestModelData类上添加注解@SessionAttributes:
@SessionAttributes(value = { "account" })
@Controller
public class TestModelData {
private final String SUCCESS = "success";
@RequestMapping("/testSessionAttribute")
public String testSessionAttribute(Map<String, Object> map) {
Account account = new Account("user1", "pwd123", "2018-01-07", "127.0.0.1");
map.put("account", account);
System.out.println("testSessionAttribute:" + map);
return SUCCESS;
}
}
此时重新测试,跳转到success.jsp页面时,显示结果如下:

说明已经把account实体对象存放到map的同时,也存放到了HttpSession中。
2)@SessionAttributes除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中。
测试3:
上边是通过指定属性名称的方式将account对象存放到HttpSession中的,实际上我们也可以通过指定对象类型实现把某一类对象存放到HttpSession。
修改TestModelData.java
@SessionAttributes(value = { "my_value_key" }, types = { Account.class, Integer.class })
@Controller
public class TestModelData {
private final String SUCCESS = "success";
@RequestMapping("/testSessionAttribute")
public String testSessionAttribute(Map<String, Object> map) {
Account account = new Account("user1", "pwd123", "2018-01-07", "127.0.0.1");
map.put("account", account);
map.put("my_value_key", "my_value");
Integer age = 30;
map.put("age", age);
Float onlineHours = 129.88f;
map.put("onlineHours", onlineHours);
System.out.println("testSessionAttribute:" + map);
return SUCCESS;
}
}
修改/WEB-INF/views/success.jsp页面:
SUCCESS PAGE<br>
testSessionAttribute request account.username:${requestScope.account.username }<br>
testSessionAttribute session account.username:${sessionScope.account.username }<br>
<br>
testSessionAttribute request my_value_key:${requestScope.my_value_key }<br>
testSessionAttribute session my_value_key:${sessionScope.my_value_key }<br>
<br>
testSessionAttribute request age:${requestScope.age }<br>
testSessionAttribute session age:${sessionScope.age }<br>
<br>
testSessionAttribute request age:${requestScope.onlineHours }<br>
testSessionAttribute session age:${sessionScope.onlineHours }<br>
此时访问链接地址,跳转到success.jsp页面后,显示结果:

SpringMVC(十一):SpringMVC 处理输出模型数据之SessionAttributes的更多相关文章
- SpringMVC(十二):SpringMVC 处理输出模型数据之@ModelAttribute
Spring MVC提供了以下几种途径输出模型数据:1)ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据:2)Map及Model:处理方法入参 ...
- SpringMVC(九):SpringMVC 处理输出模型数据之ModelAndView
Spring MVC提供了以下几种途径输出模型数据: 1)ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据: 2)Map及Model:处理方法 ...
- SpringMVC(十):SpringMVC 处理输出模型数据之Map及Model
Spring MVC提供了以下几种途径输出模型数据: 1)ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据: 2)Map及Model:处理方法 ...
- SpringMVC:学习笔记(4)——处理模型数据
SpringMVC—处理模型数据 说明 SpringMVC 提供了以下几种途径输出模型数据: – ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添 ...
- SpringMVC 学习笔记(四) 处理模型数据
Spring MVC 提供了下面几种途径输出模型数据: – ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体就可以通过该对象加入模型数据 – Map及Model: ...
- SpringMVC(十五) RequestMapping map模型数据
控制器中使用map模型数据,传送数据给视图. 控制器参考代码: package com.tiekui.springmvc.handlers; import java.util.Arrays; impo ...
- SpringMVC(十六) 处理模型数据之SessionAttributes
@SessionAttributes原理 默认情况下Spring MVC将模型中的数据存储到request域中.当一个请求结束后,数据就失效了.如果要跨页面使用.那么需要使用到session.而@Se ...
- SpringMvc:处理模型数据
SpringMvc提供了以下途径输出模型数据: -ModelAndView:处理方法返回值类型为ModelAndView,方法体即可通过该对象添加模型数据 -Map或Model:入参为org.spri ...
- springmvc学习(五)——处理模型数据
Spring MVC 提供了以下几种途径输出模型数据: ModelAndView: 处理方法返回值类型为 ModelAndView 时, 方法体即可通过该对象添加模型数据Map 及 Model: 入参 ...
随机推荐
- C语言第二次博客作业---分支结构
一,PTA实验作业 题目1.计算分段函数 本题目要求计算下列分段函数f(x)的值: 1.实验代码 double x,result; scanf("%lf",&x); if( ...
- angularjs常用事件
1. 视图模板加载完毕 $scope.$on('$viewContentLoaded', function() { alert('view template loaded'); });
- 解决ssm项目表单数据提交到数据库乱码问题
问题:在ssm整合的项目里,从前台页面获取表单数据存到数据库中乱码 先说解决办法然后分析:问题出在form表单的提交方式上,我的web.xml配置过滤器都已经指定了编码集,为什么没有生效?原因是,对于 ...
- 笔记:Spring Boot 监控与管理
在微服务架构中,我们将原本庞大的单体系统拆分为多个提供不同服务的应用,虽然,各个应用的内部逻辑因分解而简化,但由于部署的应用数量成倍增长,使得系统的维护复杂度大大提升,为了让运维系统能够获取各个为服务 ...
- new Image的API
- 前端的UI设计与交互之字体篇
跨平台的字体设定,力求在各个操作系统下都有最佳展示效果.字体是界面设计中最重要的基本构成之一,用户通过文本来消化内容和完成工作,优雅的字体将大大提升用户的阅读体验及工作效率.在满足不同终端始终保持良好 ...
- Spring Boot Junit单元测试
http://blog.csdn.net/catoop/article/details/50752964
- Linux 如何使用echo指令向文件写入内容
0.前言 本文总结如何使用echo命令向文件中写入内容,例如使用echo指令覆盖文件内容,使用echo指令向文件追加内容,使用echo指令往文件中追加制表符. echo向文件中输出内容 ...
- VMware 下快速克隆出多个 Linux 环境
念念不忘,必有回响 好好工作,好好吃饭,困了倒头就睡:吃你认为好吃的,吃到饱:买贵的,你想买的:去玩去野: 就这样. 为什么要克隆多个 Linux 系统? 因为要玩阿. 其实也不是了,就是为了折腾嘛, ...
- 深入解析C语言数组和指针
概述 指针是C语言的重点,同时也是让初学者认为最难理解的部分.有人说它是C语言的灵魂,只有深入理解指针才能说理解了C语言.暂且撇开这些观点不谈.这章是我在阅读<C和指针>这本书的读书笔记. ...