会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes

简介: 会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes

@SessionAttributes

@SessionAttributes 是一个 SpringMVC 中的注解,它用于将特定的模型属性暂时存储在 HTTP 会话(session)中。当使用 SessionAttributes 注解时,被注解的模型属性可以在多个请求之间保持状态并共享数据。

使用 SessionAttributes 注解的步骤如下:

  1. 在控制器类上添加 @SessionAttributes 注解,指定需要存储在会话中的模型属性名。例如,@SessionAttributes(“user”) 表示将名为 “user” 的模型属性存储在会话中。
  2. 在处理方法(即带有 @RequestMapping 注解的方法)上,如果需要将模型属性添加到会话中,则可以使用 @ModelAttribute 注解。例如,@ModelAttribute(“user”) User user 表示将名为 “user” 的模型属性添加到会话中,并将其绑定到名为 “user” 的参数上。
  3. 访问该控制器的其他处理方法时,可以直接通过方法参数获取存储在会话中的模型属性。Spring 会自动从会话中获取该属性并将其注入到方法参数中。
  4. 当需要结束会话时,可以使用 @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";
    }
}


相关文章
|
9天前
|
前端开发 Java 测试技术
Java一分钟之Spring MVC:构建Web应用
【5月更文挑战第15天】Spring MVC是Spring框架的Web应用模块,基于MVC模式实现业务、数据和UI解耦。常见问题包括:配置DispatcherServlet、Controller映射错误、视图解析未设置、Model数据传递遗漏、异常处理未配置、依赖注入缺失和忽视单元测试。解决这些问题可提升代码质量和应用性能。注意配置`web.xml`、`@RequestMapping`、`ViewResolver`、`Model`、`@ExceptionHandler`、`@Autowired`,并编写测试用例。
300 3
|
7天前
|
前端开发 Java 关系型数据库
使用IDEA搭建一个Spring + AOP (权限管理 ) + Spring MVC
使用IDEA搭建一个Spring + AOP (权限管理 ) + Spring MVC
|
9天前
|
JSON 前端开发 Java
【JavaEE】让“单车变摩托”的神级框架—Spring MVC的深入讲解(下)
【JavaEE】让“单车变摩托”的神级框架—Spring MVC的深入讲解
9 0
|
9天前
|
JSON 前端开发 Java
【JavaEE】让“单车变摩托”的神级框架—Spring MVC的深入讲解(上)
【JavaEE】让“单车变摩托”的神级框架—Spring MVC的深入讲解
10 0
|
9天前
|
设计模式 前端开发 Java
初识Spring MVC
初识Spring MVC
15 0
|
9天前
|
前端开发 Java 应用服务中间件
Spring MVC框架概述
Spring MVC 是一个基于Java的轻量级Web框架,采用MVC设计模型实现请求驱动的松耦合应用开发。框架包括DispatcherServlet、HandlerMapping、Handler、HandlerAdapter、ViewResolver核心组件。DispatcherServlet协调这些组件处理HTTP请求和响应,Controller处理业务逻辑,Model封装数据,View负责渲染。通过注解@Controller、@RequestMapping等简化开发,支持RESTful请求。Spring MVC具有清晰的角色分配、Spring框架集成、多种视图技术支持以及异常处理等优点。
22 1
|
9天前
|
监控 前端开发 Java
SpringBoot与SpringMVC有哪些区别?
SpringBoot和SpringMVC是Java开发中常用的两个框架,它们都是由Spring框架所提供的,但在功能和使用方式上有着一些区别。
25 2
|
9天前
|
数据采集 前端开发 Java
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
25 3
|
9天前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
65 0
|
9天前
|
缓存 安全 Java
Spring Boot 面试题及答案整理,最新面试题
Spring Boot 面试题及答案整理,最新面试题
143 0