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: 入参 ...
随机推荐
- 分享PHP中的10个实用函数
分享PHP中的10个实用函数 PHP的功能越来越强大,里面有着非常丰富的内置函数.资深的PHP程序员对它们可能都很熟悉,但很多参加PHP培训的PHP初学者,仍然对一些非常有用的函数不太熟悉.这篇文章里 ...
- MySql (MariaDB)的varchar字段的存储的是字符还是字节
关于varchar字段: 在version4之前,按字节: version5之后,按字符. 现在普遍都按字符算:无论中文英文,都算一个字符 既: varchar(10) == '123456789a' ...
- react+redux+webpack+git技术栈
一.git bash here mdkr cnpm init -y ls -a ls -l ls -la隐藏的也可查看 cat package.json 二.npm npm i webpack-dev ...
- React 组件间通讯
React 组件间通讯 说 React 组件间通讯之前,我们先来讨论一下 React 组件究竟有多少种层级间的关系.假设我们开发的项目是一个纯 React 的项目,那我们项目应该有如下类似的关系: 父 ...
- Redis 慢日志
redis的slowlog是redis用于记录记录慢查询执行时间的日志系统.由于slowlog只保存在内存中,因此slowlog的效率很高,完全不用担心会影响到redis的性能.Slowlog是Red ...
- MIP (百度移动网页加速器)
前言:第一次用移动网页加速器,感觉好心情都被弄坏了.确实性能提高了不少,但是限制js,对于一些交互实现都成问题.MIP是Mobile Instant Pages的缩写,指百度移动网页加速器, 是一套应 ...
- 源码实现 --> strdel
删除字符串中某个字符strdel 函数 char *strDel(char* str,const char chToDel) 不是库里面的函数,自己实现的原型,删除str中所有的chToDel字符. ...
- Algorithm --> 二分图最大匹配
匈牙利算法 二分图:把一个图的顶点划分为两个不相交集 U 和 V ,使得每一条边都分别连接U . V 中的顶点.如果存在这样的划分,则此图为一个二分图. 匹配:在图论中,一个「匹配」(match ...
- android 滑动分页
import android.app.ListActivity;import android.os.Bundle;import android.os.Handler;import android.vi ...
- 涉及模式之 装饰器模式详解(与IO不解的情缘)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. LZ到目前已经写了九个设计模 ...