1.作用
用于多次执行控制器方法间的参数共享
2.属性
value:用于指定存入的属性名称
type:用于指定存入的数据类型
3.示例
先写JSP代码
<a href="demo1/putMethod">存入 SessionAttribute</a>
<br>
<a href="demo1/getMethod">取出 SessionAttribute</a>
<br>
<a href="demo1/cleanMethod">清除 SessionAttribute</a>
编写控制器代码
@Controller
@RequestMapping("demo1")
@SessionAttributes(value ={"username","password","age"})
public class HelloController {
@RequestMapping("putMethod")
public String putMethod(Model model){
model.addAttribute("username", "泰斯特");
model.addAttribute("password","123456");
model.addAttribute("age","admin");
return "success";
}
@RequestMapping("getMethod")
public String getMethod(ModelMap model){
System.out.println(model.get("username")+";"+model.get("password
")+";"+model.get("age"));
return "success";
}
@RequestMapping("cleanMethod")
public String cleanMethod(SessionStatus sessionStatus){
sessionStatus.setComplete();
return "success";
}
}
通过Model对象的addAttribute方法来向作用域里存储数据。
这里听到作用域可能会有点蒙,下面来讲一下
Model
对象的 addAttribute
方法存储数据的作用域需结合 @SessionAttributes
注解分析:
默认请求作用域:正常情况下,Model
存储的数据会放入 请求作用域,仅在当前请求处理周期内有效。
会话作用域(因 @SessionAttributes
):也叫session作用域,由于类上声明了 @SessionAttributes(value = {"username", "password", "age"})
,这三个属性会额外存入 会话作用域。会话作用域的数据会跨请求保留,直到会话结束(如浏览器关闭或主动清除会话)。
因此,代码中通过 Model
存储的 username
、password
、age
最终会存在 会话作用域 中,而若未被 @SessionAttributes
声明的属性,仍默认存于请求作用域。
然后可以用get方法从session作用域中取数据,也可以用SessionStatus类的方法去删除session作用域中的数据。