Springmvc之向JSP页面提供数据(request,session)

  • Springmvc默认就是转发,因此可以在request域中共享数据

  • 表单提交,注册

<formaction="<%=request.getContextPath()%>/user/login.do"method="post">
	username:<inputtype="text"name="username"> <br>
	password:<inputtype="text"name="password"> <br>
	age:<inputtype="text"name="age">
	<inputtype="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";
}

原文 

https://chenjiabing666.github.io/2018/04/26/Springmvc之向JSP页面提供数据-request,session/

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Springmvc之向JSP页面提供数据(request,session)

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址