动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

浅谈Spring MVC获取session方法

08-21 16:31 105浏览
举报 T字号
  • 大字
  • 中字
  • 小字

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使用者!

 

 

 

0人推荐
共同学习,写下你的评论
0条评论
十年
程序员十年

13篇文章贡献72369字

作者相关文章更多>

推荐相关文章更多>

DOM渲染的详细过程

QCode09-04 14:38

CSS水平和垂直居中技巧大梳理

Code大师09-04 14:50

mui的input框在IOS系统下无法聚焦或点击多次才能聚焦

不写代码你养我啊08-23 11:14

推荐的-视.频播放器以及在线客服

不写代码你养我啊09-17 18:02

谈谈java多线程的三大特性

要学习了06-18 18:13

发评论

举报

0/150

取消