# Spring MVC 中获取session的几种方法
# 将HttpSession作为Spring MVC 的方法参数传入,直接获取。
直接在Spring MVC 的方法中将参数传入:
public void getSessionAction(HttpSession session){
}
# 将HttpServletRequest作为Spring MVC 的方法参数,间接获取
先是获取到request,然后通过request间接的获取到session,代码如下:
public void getSessionAction(HttpServletRequest request){
HttpSession session = request.getSession();
}
这种方法时比较常见的一种,但是有些人会觉得这种比较麻烦,因为每次使用session都需要传入一个参数
# 通过@Autowired HttpServletRequest request 获取
@Autowired HttpServletRequest request
# 使用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
确切来说这种方式并不是直接获取到session,但是我们可以通过这种方式将我们想要值放入到session中去。