@SessionAttributes
@SessionAttributes 是一个 SpringMVC 中的注解,它用于将特定的模型属性暂时存储在 HTTP 会话(session)中。当使用 SessionAttributes 注解时,被注解的模型属性可以在多个请求之间保持状态并共享数据。
使用 SessionAttributes 注解的步骤如下:
- 在控制器类上添加 @SessionAttributes 注解,指定需要存储在会话中的模型属性名。例如,@SessionAttributes(“user”) 表示将名为 “user” 的模型属性存储在会话中。
- 在处理方法(即带有 @RequestMapping 注解的方法)上,如果需要将模型属性添加到会话中,则可以使用 @ModelAttribute 注解。例如,@ModelAttribute(“user”) User user 表示将名为 “user” 的模型属性添加到会话中,并将其绑定到名为 “user” 的参数上。
- 访问该控制器的其他处理方法时,可以直接通过方法参数获取存储在会话中的模型属性。Spring 会自动从会话中获取该属性并将其注入到方法参数中。
- 当需要结束会话时,可以使用 @SessionAttributes 注解的 value 属性来指定需要清除的模型属性名。例如,@SessionAttributes(value = “user”, clearAfterCompletion = true) 表示在请求完成后清除名为 “user” 的模型属性。
SessionAttributes 的作用是在多个请求之间共享模型属性。这在某些情况下很有用,例如在多个页面间共享用户登录信息、购物车内容等。需要注意的是,存储在会话中的模型属性在整个会话期间都会存在,直到会话结束或被手动清除。
需要注意的是,SessionAttributes 注解只在 SpringMVC 的会话范围内起作用,并不会影响到 Servlet API 中的会话管理。因此,使用 SessionAttributes 时需要确保适当地处理会话的创建和销毁,以防止潜在的内存泄漏或其他问题。
package world.xuewei.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.bind.support.SessionStatus;
/**
* 第一个控制器
*
* @author 薛伟
* @since 2023/10/30 16:18
*/
@Controller
@SessionAttributes(value = {"name", "age", "address"})
public class SessionController {
@RequestMapping("/session")
public String session(Model model) {
model.addAttribute("name", "张三");
model.addAttribute("age", 25);
model.addAttribute("sex", "Man");
return "index";
}
/**
* 清空当前 Session
*/
@RequestMapping("/delSession")
public String delSession(SessionStatus sessionStatus) {
if (!sessionStatus.isComplete()) {
sessionStatus.setComplete();
}
return "index";
}
}