ModelAndView和Map都是将数据模型放到请求域request中。
(1)若希望在多个请求之间共用某个数据模型属性数据,可以在控制器类上加一个@SessionAttributes。springmvc会将在模型中对应的属性存到HttpSession中。
(2)@SessionAttributes除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中。
SpringmvcTest.java
代码语言:javascript复制@SessionAttributes(value={"user"},types= {String.class})
@RequestMapping("/springmvc")
@Controller
public class SpringmvcTest {
private static final String SUCCESS = "success";
@RequestMapping(value="/testSessionAttributes")
public String testSessionAttributes(Map<String,Object> map) {
User user = new User();
user.setUsername("tom");
user.setAge(12);
map.put("user", user);
map.put("school", "一中");
System.out.println("testSessionAttributes");
return SUCCESS;
}
}
index.jsp
代码语言:javascript复制 <a href="springmvc/testSessionAttributes">testSessionAttributes</a>
success.jsp
代码语言:javascript复制 <p>Success</p>
<p>request user:${requestScope.user}</p>
<p>session user:${sessionScope.user}</p>
<p>request school:${requestScope.school}</p>
<p>session school:${sessionScope.school}</p>
在启动服务器之后:
点击:
说明: SessionAttributes注解只能修饰类,value属性用于将指定名字的属性放入到session中。types属性将指定的数据类型放到session中。在jsp中,利用requestScope(请求域)可以取得传过来的模型数据,利用sessionScope(会话域)来获取session中的数据。如果不利用SessionAttributes,那么数据模型就只会存放在request中,在session中不会有相应的数据。