>>分享孙卫琴的Java技术专稿和著作 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 12913 个阅读者 刷新本主题
 * 贴子主题:  【Spring专题】把Model的数据存放在session范围 回复文章 点赞(0)  收藏  
作者:sunweiqin    发表时间:2021-10-09 12:06:03     消息  查看  搜索  好友  邮件  复制  引用

本文参考《精通Spring:JavaWeb开发技术详解》,作者:孙卫琴,清华大学出版社出版

默认情况下,添加到Model中的数据存放在request范围内。如果要把数据存放到session范围内,可以使用@SessionAttributes注解。以下例程1的TestSessionController类使用了@SessionAttributes注解。

例程1 TestSessionController.java
@Controller
@SessionAttributes(value={"person","age"})
public class TestSessionController {

  @ModelAttribute("person")
  public Person setModel(){
    Person p=new Person();
    p.setUserName("Tom");
    return p;
  }

@RequestMapping(value="/testsession")
  public String testSession(Model model,int age,String address){

    model.addAttribute("age",age);
    model.addAttribute("address",address);
    return"sessiontest";
  }

  @RequestMapping(value="/repeat")
   public String repeat(SessionStatus sessionStatus){
    return"sessiontest";
  }

  @RequestMapping(value="/sessionclear")
  public String testSessionClear(SessionStatus sessionStatus){
    sessionStatus.setComplete();  //清除session范围内的Model数据
    return"sessiontest";
  }
}

以上TestSessionController类前的@SessionAttributes(value={"person","age"})注解的作用是声明把Model中的person属性和age属性存放在request范围内。

setModel()方法向Model中添加了person属性,testSession()方法向Model中添加了age属性,person属性和age属性都会保存在session范围内。testSession()方法还向Model中添加了address属性,该属性会保存在默认的request范围内。

在testSessionClear()方法中,通过SessionStatus类的setComplete()方法来清除session范围内的Model数据。

testSession()、repeat()和testSessionClear()方法都会把请求转发给sessiontest.jsp。sessiontest.jsp输出session范围和request范围内的共享数据:

UserName:${sessionScope.person.userName}
Age:${sessionScope.age}
Address:${requestScope.address}

下面按以下步骤来运行本范例。
(1)通过浏览器访问testSession()方法,URL如下:
localhost:8080/helloapp/testsession?age=22&address=shanghai

Spring MVC框架先调用setModel()方法,再调用testSession()方法,这两个方法向session范围存放person属性和age属性,还向request范围存放address属性。sessiontest.jsp会在网页上输出如下信息:

UserName:Tom
Age:22
Address:shanghai

(2)通过浏览器访问repeat()方法,URL如下:
localhost:8080/helloapp/repeat

此时,在session范围内存在person和age属性,但是在request范围内没有address属性,sessiontest.jsp会在网页上输出如下信息:

UserName:Tom
Age:22
Address:

(3)通过浏览器访问testSessionClear()方法,URL如下:
localhost:8080/helloapp/sessionclear

testSessionClear()方法清除session范围内的Model数据,sessiontest.jsp会在网页上输出如下信息:

UserName:
Age:
Address:

程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->图形用户界面(上)
  JavaWeb开发-->JSP技术详解(Ⅱ)
  JSP与Hibernate开发-->映射一对多关联关系
  Java网络编程-->基于MVC和RMI的分布式应用
  精通Spring-->创建综合购物网站应用
  Vue3开发-->通过Vuex进行状态管理
  【Vue.js技术专题】注册全局组件和局部组件
  【Vue.js技术专题】插槽slot的基本用法
  【Spring Cloud Alibaba专题】Nacos配置属性的持久化
  【Spring专题】@Query和@Modifying注解的增删改操作
  探讨IT技术作者的素养
  【持久化专题】映射对象标识符的基本原理
  【持久化专题】用@Formula注解映射派生属性
  【持久化专题】通过JPA API调用存储过程
  【Java网络编程专题】用Apache FTPClient在FTP服务器上创建目...
  【Java网络编程专题】用Apache HttpClients下载网上的图片等...
  【Java网络编程专题】用java.net.URL类访问HTTP服务器读取网...
  【Java网络编程专题】用Java套接字访问HTTP服务器读取网页数...
  【Java网络编程专题】优化访问数据库的程序代码的一些技巧
  【JavaWeb专题】Spring MVC创建Web应用范例,轻松入门
  【Java基础编程专题】Java基本类型和引用类型的三个区别
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


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