|  | 本文参考《精通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会在网页上输出如下信息:
 
 
 程序猿的技术大观园:www.javathinker.net
 |  |