Spring MVC 中获取session的几种方法

简介: Spring MVC 中获取session的几种方法

Spring MVC 中使用session是一种常见的操作,但是大家上网搜索一下可以看到获取session的方式方法五花八门

第一种:将HttpSession作为Spring MVC 的方法参数传入,直接获取。

直接在Spring MVC 的方法中将参数传入:

1. public void getSessionAction(HttpSession session){
2.}

   这种方法我在网上搜索时发现很多人并不推荐使用

第二种:将HttpServletRequest作为Spring MVC 的方法参数,间接获取

     先是获取到request,然后通过request间接的获取到session,代码如下:

public void getSessionAction(HttpServletRequest request){
  HttpSession session = request.getSession();
}

这种方法是比较常见的一种,但是有些人会觉得这种比较麻烦,因为每次使用session都需要传入一个参数,于是就有了第三种方法

第三种:通过@Autowired HttpServletRequest request 获取

      这种方式类似于我们注入service类的时候是一样的,第一眼看到这种方式的时候我是拒绝的,因为我们都知道,servlet是默认采用单例多线程的方式处理多用户请求的,如果直接把它写成一个全局的变量,会不会是不安全的?不过这里基于spring注解,所以基本上可以确保线程的安全性。但是说实在,我还是不放心,于是上网查了一些资料,最后看了看spring这部分的源码(我会在另一片文章中详细和大家讨论的),最后发现这样做是完全可行的。

//在service层注入HttpSession对象,然后直接获取
@Autowired
private HttpSession session;
public void getsession (){
    String name = (String) session.getAttribute("name");
}
//可以在代码内尝试一下

第四种:使用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中去。

目录
相关文章
|
11天前
|
前端开发 Java Spring
Spring MVC源码分析之DispatcherServlet#getHandlerAdapter方法
`DispatcherServlet`的 `getHandlerAdapter`方法是Spring MVC处理请求的核心部分之一。它通过遍历预定义的 `HandlerAdapter`列表,找到适用于当前处理器的适配器,并调用适配器执行具体的处理逻辑。理解这个方法有助于深入了解Spring MVC的工作机制和扩展点。
16 1
|
12天前
|
前端开发 Java Spring
Spring MVC源码分析之DispatcherServlet#getHandlerAdapter方法
`DispatcherServlet`的 `getHandlerAdapter`方法是Spring MVC处理请求的核心部分之一。它通过遍历预定义的 `HandlerAdapter`列表,找到适用于当前处理器的适配器,并调用适配器执行具体的处理逻辑。理解这个方法有助于深入了解Spring MVC的工作机制和扩展点。
22 1
|
17天前
|
存储 安全 Java
|
27天前
|
JSON 前端开发 Java
SSM:SpringMVC
本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。
|
9天前
|
前端开发 Java Spring
Spring MVC源码分析之DispatcherServlet#getHandlerAdapter方法
`DispatcherServlet`的 `getHandlerAdapter`方法是Spring MVC处理请求的核心部分之一。它通过遍历预定义的 `HandlerAdapter`列表,找到适用于当前处理器的适配器,并调用适配器执行具体的处理逻辑。理解这个方法有助于深入了解Spring MVC的工作机制和扩展点。
15 0
|
1月前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
52 2
|
1月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
95 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
2月前
|
Java 应用服务中间件 Spring
IDEA 工具 启动 spring boot 的 main 方法报错。已解决
IDEA 工具 启动 spring boot 的 main 方法报错。已解决
|
2月前
|
XML 缓存 前端开发
springMVC02,restful风格,请求转发和重定向
文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
springMVC02,restful风格,请求转发和重定向
|
2月前
|
存储 NoSQL Java
Spring Session框架
Spring Session 是一个用于在分布式环境中管理会话的框架,旨在解决传统基于 Servlet 容器的会话管理在集群和云环境中的局限性。它通过将用户会话数据存储在外部介质(如数据库或 Redis)中,实现了会话数据的跨服务器共享,提高了应用的可扩展性和性能。Spring Session 提供了无缝集成 Spring 框架的 API,支持会话过期策略、并发控制等功能,使开发者能够轻松实现高可用的会话管理。
Spring Session框架