Springmvc之向JSP页面提供数据(request,ses
2018-10-07 本文已影响52人
爱撒谎的男孩
Springmvc之向JSP页面提供数据(request,session)
准备
-
Springmvc默认就是转发,因此可以在request域中共享数据
-
表单提交,注册
<form action="<%=request.getContextPath()%>/user/login.do" method="post">
username:<input type="text" name="username"> <br>
password:<input type="text" name="password"> <br>
age:<input type="text" name="age">
<input type="submit" value="提交">
</form>
- User类
public class User {
private String username;
private String password;
int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
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;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
}
}
使用HttpServletRequest转发
- 直接使用
HttpServletRequest
中的setAttribute(key,value)
即可添加属性值request
域中,那么在JSP页面即可使用EL表达式
获取
/**
* @param user 接收请求参数
* @param request 添加属性值request域中
*/
@RequestMapping(value = "/login.do")
public String login(User user,HttpServletRequest request,HttpServletResponse response) {
System.out.println(user);
request.setAttribute("user", user);
return "error";
}
【不常用】使用ModelAndView转发
-
ModelAndView
中本身就是用来存储数据和视图的,因此我们可以使用ModelAndView来传值 ModelAndView
会利用HttpServletRequest
中的setAttribute(key,value)
将数据存储在requst
域中-
Model
表示的就是转发的数据,可以通过ModelAndView(String viewName,Map<String,?> map)
构造方法封装Model
,其中Model
的类型就是Map<String,?>
@RequestMapping(value = "/login.do")
public ModelAndView login(User user) {
System.out.println(user);
//创建一个Map,存储数据
Map<String, User> map=new HashMap<String, User>();
//将获取的user对象存储进去
map.put("user", user);
//返回一个ModelAndView对象,第一个参数是视图,第二个是Map存储数据
return new ModelAndView("error", map);
}
【推荐使用】使用ModelMap转发
-
利用
HttpServletRequest
中的setAtttibute()
添加数据到request
域中 -
直接在处理请求的方法中,添加
ModelMap
类型的参数,当需要转发数据时,调用它的addAttribute
方法封装数据,如果需要封装多条,多次调用即可
@RequestMapping(value = "/login.do")
public String login(User user,ModelMap map) {
System.out.println(user);
//将数据存储在ModelMap中
map.addAttribute("user", user);
return "error";
}
拓展
- 从源代码可以看出,
ModelMap
实际上是实现了Map接口,因此我们也可以直接使用Map传值- 直接在方法的参数中声明即可,spring会自动注入
@RequestMapping(value = "/login.do")
public String login(User user,Map<String, Object> map) {
System.out.println(user);
//将数据存储在ModelMap中
map.put("user", user);
return "error";
}
Session
-
浏览器关闭或者在session的指定时间内没有操作,那么session会自动关闭
-
通常会把访问的用户的唯一标识(用户的
ID
或用户名,邮箱等)和使用频率使用较高的数据(用户名,昵称,头像)存储在Session
中。
使用HttpSession
@RequestMapping(value = "/login.do")
public String login(User user,HttpSession session) {
//将id存储在session中
session.setAttribute("uid", "9527");
return "error";
}