ModelAndView和Map都是将数据模型放到请求域request中。
(1)若希望在多个请求之间共用某个数据模型属性数据,可以在控制器类上加一个@SessionAttributes。springmvc会将在模型中对应的属性存到HttpSession中。
(2)@SessionAttributes除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中。
SpringmvcTest.java
@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
<a href="springmvc/testSessionAttributes">testSessionAttributes</a>
success.jsp
<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中不会有相应的数据。