Spring MVC之@SessionAttributes和@CookieValue

  @SessionAttributes注解可以指定将Model中的某些属性转存一份到HttpSession对象中。
  @CookieValue注解用于将请求的Cookies数据映射到功能处理方法的参数上。

@SessionAttributes

@SessionAttributes注解将Model的属性从默认的request域拷贝一份到session域上,可以多个属性。
该注解只能声明在类上,不能声明在方法上。

  1. 属性:names, String[]类型, Model中属性的名称,即存储在HttpSession当中的属性名称。
  2. 属性:value, String[]类型, names属性的别名。
  3. 属性:types, Class<?>[], 说明Model中属性的类型(class 对象)。
    @SessionAttributes(types= {SysUser.class, String.class}, value= {"sysUser","userName"})

Controller代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Controller
@SessionAttributes(value = "userName")
@RequestMapping("/user")
public class SessionController {

@RequestMapping("/session")
public String getSessionAttributes(Model model) {
SysUser sysUser = new SysUser()
.setAccount("admin")
.setPassword("11223344");
model.addAttribute("sysUser", sysUser);
model.addAttribute("userName", "root");
return "session";
}
}

JSP代码:

1
2
3
4
5
6
7
8
9
10
11
<body>	
<h3>requestScope获取用户:</h3>
<p>账号:${requestScope.sysUser.account}</p>
<p>密码:${requestScope.sysUser.password}</p>
<p>账号:${requestScope.userName}</p>
<hr>
<h3>sessionScope获取用户:</h3>
<p>账号:${sessionScope.userName}</p>
<p>账号:${sessionScope.sysUser.account}</p>
<p>密码:${sessionScope.sysUser.password}</p>
</body>

@CookieValue

@CookieValue可以很方便地获取到请求的JSESSIONID
支持的属性有:

  1. 属性:name, String 类型, 指定请求头绑定的名称。
  2. 属性:value, String 类型, name 属性的别名。
  3. 属性:required, boolean 类型, 参数是否必须绑定。
  4. 属性:defaultValue, String 类型, 如果没有传递参数,则使用默认值。
1
2
3
4
5
6
7
8
9
10
11
//将session绑定到参考 sessionId 上
@Controller
@RequestMapping("/sys")
public class SysUserController {

@RequestMapping("/getSession")
public void getSession(
@CookieValue(value="JSESSIONID", defaultValue="") String sessionId) {
System.out.println(sessionId);
}
}
作者

光星

发布于

2018-01-28

更新于

2022-06-17

许可协议

评论