Session与Request区别在于,springMVC处理时,将数据放在哪个进程里。
在浏览器调用时,会出现区别,一旦弄错,就会获取不到数据。
先模拟一个取数据的一个实现。
假装USER模型是数据库中的数据,我模拟user属性如下:
package com.hentities;
public class User {
private String username;
private String password;
private int age;
private Adress adress;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Adress getAdress() {
return adress;
}
public void setAdress(Adress adress) {
this.adress = adress;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + ", age=" + age + ", adress=" + adress + "]";
}
public User(){}
public User(String userName,String password,int age) {
this.username=userName;
this.password=password;
this.age=age;
}
}
这里使用了USER的三个属性,地址为空
this.username=userName;
this.password=password;
this.age=age;
@RequestMapping("/request")
@Controller
public class SpringMVCtest {
private static final String SUCCESS="success";
@RequestMapping("/Session")
public String testSession(Map map) {
map.put("user1", new User("A", "123", 12));
map.put("user2", new User("B", "123", 35));
map.put("user3", new User("C", "123", 24));
return SUCCESS;
}
}
即目标页面映射字符串“request/Session”时,页面自动转向配置路径下的success.jsp页面。
我在目标页面success.jsp嵌入这样的代码:
//div:背景灰色,字体颜色黄色
<div style="background:#CCC;color:yellow">
name: ${requestScope.names}
<br><br>
request User1: ${requestScope.user1}
<br>
session User1: ${sessionScope.user1}
<br><br>
request User2: ${requestScope.user2}
<br>
session User2: ${sessionScope.user2}
<br><br>
request User3: ${requestScope.user3}
<br>
session User3: ${sessionScope.user3}
<br>
div>
request为处理request映射中的模型数据,session 为处理session 进程数据,同时获取user1、user2、user3.
可以看到request请求域里,数据都获取成功了。session请求中数据,都没有请求到数据。
如何用session也请求到数据?
session有两个属性,一个是type,一个value。
value中可以放入字符串数组,type可以放类类型。其中value为默认
在类上加入注解
例如:
@SessionAttributes(value= {"user1","user3"})
@SessionAttributes(value={"user2"},types= {String.class})
再或者简化为:
@SessionAttributes("user2")
//value为默认属性
这样,第一个注解是将”user1”,”user3”加入到session中,在浏览器中可以session调用这两个模型数据。
同理,第二个注解是将user2加入到session中,在浏览器中可以session调用这user2模型数据。
可以看出,session请求域中成功加入我们指定的模型。