>>分享流行的Java框架以及开源软件,对孙卫琴的《精通Spring:Java Web开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 19370 个阅读者 刷新本主题
 * 贴子主题:  @SessionAttribute和@SessionAttributes的区别 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2024-04-30 09:39:43     消息  查看  搜索  好友  邮件  复制  引用

@SessionAttributes 和 @SessionAttribute的区别
Spring MVC中有两个长得非常像的注解:@SessionAttributes 和 @SessionAttribute。
我们先看下@SessionAttributes的定义:
@SessionAttributes用于在请求之间的HTTP Servlet会话中存储model属性。 它是类型级别的注解,用于声明特定控制器使用的会话属性。 这通常列出应透明地存储在会话中以供后续访问请求的模型属性的名称或模型属性的类型。
举个例子:
@SessionAttributes("user")
public class LoginController {

@ModelAttribute("user")
public User setUpUserForm() {
return new User();
}
}
我们可以看到@SessionAttributes是类注解,他用来在session中存储model。 如上面的例子,我们定义了一个名为“User”的model并把它存储在Session中。
我们再看一下@SessionAttribute的定义:
如果您需要访问全局存在(例如,在控制器外部(例如,通过过滤器)管理)并且可能存在或可能不存在的预先存在的会话属性,则可以在方法参数上使用@SessionAttribute注释,例如 以下示例显示:
@Controller
@RequestMapping("/user")
public class UserController {

   /*
    * Get user from session attribute
    */
   @GetMapping("/info")
   public String userInfo(@SessionAttribute("user") User user) {

      System.out.println("Email: " + user.getEmail());
      System.out.println("First Name: " + user.getFname());

      return "user";
   }
}
@SessionAttribute只是获取存储在session中的属性。如果要设置(添加删除)session的属性,则要考虑将org.springframework.web.context.request.WebRequest或javax.servlet.http.HttpSession注入到控制器方法中。
@SessionAttributes中绑定的model可以通过如下几个途径获取:
在视图中通过request.getAttribute或session.getAttribute获取
在后面请求返回的视图中通过session.getAttribute或者从model中获取
自动将参数设置到后面请求所对应处理器的Model类型参数或者有@ModelAttribute注释的参数里面。
@SessionAttributes用户后可以调用SessionStatus.setComplete来清除,这个方法只是清除SessionAttribute里的参数,而不会应用Session中的参数。
@Controller
@SessionAttributes("pet")
public class EditPetForm {

    // ...

    @PostMapping("/pets/{id}")
    public String handle(Pet pet, BindingResult errors, SessionStatus status) {
        if (errors.hasErrors) {
            // ...
        }
            status.setComplete();
            // ...
        }
    }
}
总结一下:
@SessionAttributes 是将model设置到session中去。
@SessionAttribute 是从session获取之前设置到session中的数据。


程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->第一个Java程序
  JavaWeb开发-->Web运作原理(Ⅲ)
  JSP与Hibernate开发-->Java对象持久化技术概述
  Java网络编程-->Java反射机制
  精通Spring-->通过Vuex进行状态管理
  Vue3开发-->Vue CLI脚手架工具
  VSCode插件的高级用法
  从零开始手写 spring ioc 框架,深入学习 spring 源码
  说一下Spring @Autowired 注解自动注入流程
  卫琴姐姐制作的最新视频课程:基于Spring的JavaWeb开发技术详...
  新书《精通Spring:Java Web开发技术详解》出版!!!
  springMVC:HandlerInterceptor拦截器的使用
  Spring配置中bean元素的id和name属性的区别
  SSM三大框架整合详细教程
  Spring Boot JPA @OneToOne
  Spring Data JPA详解
  RESTful API的最佳设计原则
  中央厨房订单管理系统,引入ActiveMQ消息队列,平滑处理高峰...
  Spring+JPA+ehcache开启二级本地缓存
  使用idea和gradle编译spring5源码
  Spring Framework 组件注册 之 @Import
  更多...
 IPIP: 已设置保密
树形列表:   
"善于选择要点就意味着节约时间,而不得要领的... hanababy 2024-04-30 09:39:43
1页 1条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。