浅谈Spring学习之request,session与globalSession作用域
1. 介绍
在 Spring 中,我们可以通过 request、session 和 globalSession 三种作用域来存储数据。这些作用域的范围从小到大逐级升高,对应的生命周期也逐级递增,具体的介绍如下:
- request:处理一次请求的过程中有效,即发送一次请求到服务器和接收服务器响应的这段时间。
- session:处理一次用户登录过程的有效期间。
- globalSession(基于 Portlet 环境):处理一次用户登录过程的有效期间,在多个 portlet 应用间共享。
2. request 作用域
request 作用域的数据在请求结束后就会销毁,可以用于传递数据给同一个请求处理过程中的其他方法,在 Spring 中使用 request 作用域需要获取对应的 HttpServletRequest 对象,示例代码如下:
@RequestMapping("/test")
public String test(HttpServletRequest request) {
request.setAttribute("name", "jack");
return "test";
}
@RequestMapping("/getResult")
public void getResult(HttpServletRequest request, HttpServletResponse response) throws IOException {
String name = (String) request.getAttribute("name");
response.getWriter().println("name: " + name);
}
在以上代码中,test 方法向 request 中存储了一个 "name" 属性,getResult 方法从 request 中获取了这个属性并将其输出。
3. session 作用域
session 作用域的数据在用户退出登录或 session 超时后销毁,可以存储用户的登录信息、用户个性化设置等信息,在 Spring 中使用 session 作用域需要获取对应的 HttpSession 对象,示例代码如下:
@RequestMapping("/login")
public String login(HttpSession session) {
session.setAttribute("username", "jack");
return "login";
}
@RequestMapping("/getUserInfo")
public void getUserInfo(HttpSession session, HttpServletResponse response) throws IOException {
String username = (String) session.getAttribute("username");
response.getWriter().println("username: " + username);
}
在以上代码中,login 方法向 session 中存储了一个 "username" 属性,getUserInfo 方法从 session 中获取了这个属性并将其输出。
需要注意的是,当用户在其他地方登录时,原本存储在 session 中的数据就会丢失,所以我们一般会在每次访问时都重新验证用户的身份。
4. globalSession 作用域
globalSession 作用域与 session 作用域类似,是一个基于 Portlet 环境的全局会话,它可以在多个 portlet 应用间共享数据。在 Spring 中使用 globalSession 作用域需要获取 PortletSession 对象,示例代码如下:
@ActionMapping(params = "action=getUser")
public void getUser(PortletSession session, ActionResponse response) {
session.setAttribute("username", "jack", PortletSession.APPLICATION_SCOPE);
response.setRenderParameter("jspPage", "/userInfo.jsp");
}
@RenderMapping(params = "jspPage=userInfo.jsp")
public ModelAndView getUserInfo(PortletSession session) {
String username = (String) session.getAttribute("username", PortletSession.APPLICATION_SCOPE);
ModelAndView modelAndView = new ModelAndView("userInfo");
modelAndView.addObject("username", username);
return modelAndView;
}
在以上代码中,getUser 方法向 globalSession 中存储了一个 "username" 属性,getUserInfo 方法从 globalSession 中获取了这个属性并将其放到 ModelAndView 对象中返回,最终通过 "userInfo.jsp" 页面展示出来。
5. 总结
在 Spring 中,我们可以通过 request、session 和 globalSession 三种作用域来存储数据,它们的生命周期和作用范围有所不同。在实际应用中,我们可以根据不同的需要选择不同的作用域来存储数据,从而实现数据的传递、共享和保存。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈Spring学习之request,session与globalSession作用域 - Python技术站