全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Spring MVC 中获取session的几种方法(小结)

Spring MVC 中使用session是一种常见的操作,但是大家上网搜索一下可以看到获取session的方式方法五花八门,最近,自己终结了一下,将获取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 获取

这种方式类似于我们注入service类的时候是一样的,第一眼看到这种方式的时候我是拒绝的,因为我们都知道,servlet是默认采用单例多线程的方式处理多用户请求的,如果直接把它写成一个全局的变量,会不会是不安全的?不过这里·基于spring注解的,所以基本上可以确保线程的安全性。但是说实在,我还是不放心,于是上网查了一些资料,最后看了看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

确切来说这种方式并不是直接获取到session,但是我们可以通过这种方式将我们想要值放入到session中去。

其实总结是一个好习惯,在总结获取session的方法过程中,看到了去多相关的博文,学习了一些意想不到的东西,所以想要拿出来,大家一起讨论。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Spring  # MVC  # 获取session  # 获取session的方法  # java中的session对象及其常用方法小结  # JavaWeb中Session对象的学习笔记  # SpringMVC实现controller中获取session的实例代码  # 了解java中的session  # java中的session对象如何获取  # 是在  # 多相  # 是一个  # 我是  # 就会  # 是一种  # 这种方法  # 很多人  # 会不会  # 推荐使用  # 会在  # 把它  # 我们可以  # 有多  # 这部  # 可以通过  # 看了看  # 这样做  # 可以看到  # 我再 


相关文章: 详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  如何在宝塔面板创建新站点?  如何快速生成可下载的建站源码工具?  建站之星微信建站一键生成小程序+多端营销系统  网站制作需要会哪些技术,建立一个网站要花费多少?  Python如何创建带属性的XML节点  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  如何零基础在云服务器搭建WordPress站点?  建站之星后台密码遗忘或太弱?如何重置与强化?  建站之星ASP如何实现CMS高效搭建与安全管理?  建站主机核心功能解析:服务器选择与网站搭建流程指南  如何通过商城免费建站系统源码自定义网站主题?  如何用PHP快速搭建CMS系统?  安徽网站建设与外贸建站服务专业定制方案  香港服务器建站指南:免备案优势与SEO优化技巧全解析  网站制作公司排行榜,四大门户网站排名?  linux top下的 minerd 木马清除方法  如何制作算命网站,怎么注册算命网站?  利用JavaScript实现拖拽改变元素大小  GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?  大连网站制作公司哪家好一点,大连买房网站哪个好?  如何用5美元大硬盘VPS安全高效搭建个人网站?  建站之星导航菜单设置与功能模块配置全攻略  定制建站模板如何实现SEO优化与智能系统配置?18字教程  PHP 500报错的快速解决方法  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  建站之星展会模板:智能建站与自助搭建高效解决方案  Android使用GridView实现日历的简单功能  如何通过商城自助建站源码实现零基础高效建站?  高端网站建设与定制开发一站式解决方案 中企动力  如何在景安云服务器上绑定域名并配置虚拟主机?  如何通过WDCP绑定主域名及创建子域名站点?  网站设计制作企业有哪些,抖音官网主页怎么设置?  建站之星如何实现PC+手机+微信网站五合一建站?  网站制作员失业,怎样查看自己网站的注册者?  如何快速搭建FTP站点实现文件共享?  电商平台网站制作流程,电商网站如何制作?  如何安全更换建站之星模板并保留数据?  广平建站公司哪家专业可靠?如何选择?  如何挑选最适合建站的高性能VPS主机?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  如何确保西部建站助手FTP传输的安全性?  建站之星后台密码遗忘如何找回?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  如何快速搭建个人网站并优化SEO?  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  Swift中循环语句中的转移语句 break 和 continue 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。