@SessionAttributes两个作用
1.把模型中指定的名字的值放到Session中
2.把Session中指定的名字的值放到模型中
@SessionAttributes("user")//将来在当前类里面对应的方法中所指定的为user对象的数据会存放到session中,user做key
@RequestMapping("/session_attributes")
@Controller
public class SessionAttributesController {
@RequestMapping("/test1")
public String test1(User u) {
//形成的key值user与@SessionAttributes("user")里面的一样就放到session级别中
System.out.println("SessionAttributesController test1()...");
System.out.println("u="+u);
return "test";
}
//test2只是去取值
@RequestMapping("/test2") //先访问test1不关闭服务器,再访问test2
public String test2(HttpSession session) { //验证test1中user的是session级别的
System.out.println("SessionAttributesController test2()...");
System.out.println("session中user="+session.getAttribute("user"));
//先访问test1再访问test2,看能不能拿到user
return "test";
}
}
不关闭tomcat
结论:@SessionAttributes可以将当前model中指定的数据存放到session中,
并且可以从session中取出数据
@SessionAttributes("user")//将来在当前类里面对应的方法中所指定的为user对象的数据会存放到session中,user做key
@RequestMapping("/session_attributes")
@Controller
public class SessionAttributesController {
@RequestMapping("/test3")//先访问test1再访问test3
public String test3(@ModelAttribute("user") User u) {
System.out.println("SessionAttributesController test3()...");
System.out.println("u="+u);
return "test";
}
}
结论:session中的数据也会在request中保存(model中保存)
//Session清空session
@RequestMapping("/test4")
public String test4(SessionStatus status) {
System.out.println("SessionAttributesController test4()...");
//清空session数据
status.setComplete();
return "test";
//先访问test1再访问test2,这时有session,再访问test4,再访问test2,有没有了session就证明清空了session
/*
先访问test1:
SessionAttributesController test1()...
u=User [id=4, name=vf, age=22]
再访问test2: 有session
SessionAttributesController test2()...
session中user=User [id=4, name=vf, age=22]
再访问test4: 清空值
SessionAttributesController test4()...
再访问test2: 没有值
SessionAttributesController test2()...
session中user=null
*/
}