Spring MVC作为一个提供了构建 Web 应用程序的全功能 MVC 模块的框架,在Spring MVC中使用session是一种常见的操作。但获取session的方法并不是唯一的,本文就为大家介绍几种Spring MVC 获取session方法。
第一种:将HttpSession作为Spring MVC 的方法参数传入,直接获取。
获取原生session对象只需要在控制类的目标方法中加入一个HttpSession类型的形参:
public class Session {
@RequestMapping("/getSession")
public String getSession(User user,HttpSession session){
session.setAttribute("CURR_USER", user);
return "index";
}
}
第二种:将HttpServletRequest作为Spring MVC 的方法参数,间接获取。
先是获取到request,然后通过request间接的获取到session,代码如下:
public void getSessionAction(HttpServletRequest request){
HttpSession session = request.getSession();
}
第三种:通过@Autowired HttpServletRequest request 获取。
这种方式类似于我们注入service类的时候是一样的,第一眼看到这种方式的时候我们可能会犹豫,因为我们都知道,servlet是默认采用单例多线程的方式处理多用户请求的,如果直接把它写成一个全局的变量,会不会是不安全的?不过这里·基于spring注解的,所以基本上可以确保线程的安全性。
第四种:使用RequestContextHolder类获取request,间接获取到session。
通过使用RequestContextHolder这个类我们可以在不传入HttpServletRequest,直接获取到本次请求中的request。一般使用中我们会对它进行封装,做成一个工具方法进行使用:
((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
注意进行强转成为ServletRequestAttributes,具体原因可以在源码中找到(有点废话了),大致的原理就是,RequestContextHolder类中有两个ThreadLocal保存当前线程下的request,每次我们调用getRequestAttributes()的时候就会获取到当前的request,调用springmvc方法的时候没有传入request,那么这个request是在哪里获取到的呢?看源码可以知道,是在一个processRequest(HttpServletRequest request, HttpServletResponse response)这个方法里面,每次挑用doget(),dopost()的时候都会条用这个方法,将我们的request,response传进去。
第五种:使用@SessionAttributes。
通过在控制类上方加入注解@SessionAttributes(value={"CURR_USER"},types={User.class})来指定session值的类型以及key值,通过方法中类型或者key值的匹配来实现自动往session中赋值。确切来说这种方式并不是直接获取到session,但是我们可以通过这种方式将我们想要值放入到session中去。
以上就是五种Spring MVC获取session方法,不排除有其他的方法,这些都是网上总结出来的,可能存在遗漏的地方。本着格物致知的学习精神,我们还是要亲自动手去实践一下方法的可行性。最后,小伙伴们可以观看本站的Spring MVC视频教程,学习更多的Spring MVC相关知识,成为一名资深的Spring MVC使用者!
QCode09-04 14:38
Code大师09-04 14:50
不写代码你养我啊08-23 11:14
不写代码你养我啊09-17 18:02
要学习了06-18 18:13