`

Spring中,在Java任何位置获取request对象

 
阅读更多

看RequestContextListener和RequestContextHolder源代码不难看出,是用过ThreadLocal实现的。

 

ThreadLocal是什么呢?看词义,它并非是一个线程,它不是一个Thread,而是一个线程局部变量,其实功能非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突。从线程的角度看,就好像每一个线程都完全拥有该变量。

 

每一个HTTP请求、都是一个独立的线程,有一个独立的ThreadLocal。利用该特性我们可以利用ThreadLocal进行、HTTP请求生命周期的暂时存取值,不同类之间进行传值。

 

RequestContextListener就是通过这一特性实现的。

 

操作方法如下:

 

第一步:在web.xml中,加入如下监听。

 

Xml代码  收藏代码
  1. <listener>  
  2.     <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>    
  3. </listener>  

 

第二步:写一个静态getRequest方法。

  

Java代码  收藏代码
  1. import org.springframework.web.context.request.RequestContextHolder;  
  2. import org.springframework.web.context.request.ServletRequestAttributes;  
  3. /** 
  4.  * 获取当前请求对象 
  5.  * @return 
  6.  */  
  7. public static HttpServletRequest getRequest(){  
  8.     try{  
  9.         return ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();  
  10.     }catch(Exception e){  
  11.         return null;  
  12.     }  
  13. }  

 

这样在web请求过程中,在任何地方都可以调用这个静态方法获取request对象了。

分享到:
评论

相关推荐

    普通java类中获取pageContext对象

    在探讨如何在普通的Java类中获取`PageContext`对象之前,我们先来了解一下`PageContext`的基本概念及其在JavaWeb开发中的重要性。`PageContext`是JavaServer Pages(JSP)技术的核心类之一,它提供了对当前页面的上...

    IP工具类,通过传入的request获取ip地址(JAVA)

    在Servlet中,我们通常使用`HttpServletRequest`对象来获取请求的相关信息,包括客户端的IP地址。以下是如何实现这一功能的代码示例: ```java import javax.servlet.http.HttpServletRequest; import javax....

    获取request的参数

    在Java Spring中,可以使用`@RequestBody`注解,如`@RequestBody MyRequestObject obj`,然后从`MyRequestObject`的属性中获取值。 5. **自定义请求头**: 如果参数以自定义HTTP头的形式存在,如`X-Custom-Header`...

    如何在springMVC的controller中获取request

    在 SpringMVC 中获取 Request 对象 在 SpringMVC 框架中,获取 Request 对象是一个非常重要的操作。很多时候,我们需要在 Controller 中获取 Request 对象以便实现某些功能,例如身份验证、Cookie 操作等。那么,在...

    线程中获取spring 注解bean

    线程中的操作往往涉及到多线程环境下的资源共享和管理,因此,如何在线程中正确地获取并使用Spring通过注解注入的对象,是一个常见的问题。本文将详细探讨这个主题。 首先,Spring的注解主要分为三类:配置注解(如...

    spring 支持@RequestBody注解依赖包

    在Spring框架中,`@RequestBody`注解是一个非常重要的组件,它主要用于处理HTTP请求体中的数据,将请求体中的JSON或XML数据映射为Java对象。这个注解通常与控制器方法的参数一起使用,帮助开发者从HTTP请求中提取并...

    Java Spring Controller 获取请求参数的几种方法详解

    这样,Spring会自动将请求参数值填充到Bean对象中。 4. **使用@ModelAttribute注解** 对于POST请求,`@ModelAttribute`注解可以用来将请求的FORM表单数据绑定到一个对象上,该对象通常是Bean: ```java @...

    java 页面上有ENCTYPE="multipart/form-data" 时action方法或者控制层用request.getParameter()获取不到值的方法 ?

    然而,这种编码方式下,常规的`request.getParameter()`方法无法正确地获取到表单中的文本字段值,因为这些值被封装在了请求的多部分结构中。以下是一些解决这个问题的方法: 1. **使用Apache Commons FileUpload库...

    java学习(ssh) action structs spring hibernet

    Java反射允许程序在运行时获取类的信息并操作类的对象。这在框架和库的设计中尤为重要,因为它提供了一种灵活的方式来创建和使用对象,而不必在编译时就确定其具体类型。 ### 4. Tomcat服务器与J2EE标准 Tomcat是一...

    JSP的Request对象练习源代码

    在这个"JSP的Request对象练习源代码"中,我们很可能会看到如何利用`HttpServletRequest`接口来实现以下功能: 1. **获取请求参数**:`Request`对象提供了`getParameter()`方法,用于获取URL中传递的查询参数或者...

    spring-developing-java-applications-enterprise

    而在Spring中,这种依赖关系的管理被转移到了一个外部容器中,即Spring容器。 - **Spring容器**:Spring容器负责实例化、定位和配置对象及其依赖关系。 - **Bean Factory**:是最基本的容器,提供了配置和管理bean的...

    SpringMVC中使用@RequestBody,@ResponseBody注解实现Java对象和XML/JSON数据自动转换(下)

    在这个例子中,`createUser` 方法使用 `@RequestBody` 从请求体中获取JSON数据并转换为 `CreateUserRequest` 对象。而 `getUser` 方法返回一个 `User` 对象,通过 `@ResponseBody` 将其转换为JSON并返回给客户端。 ...

    java获取路径的各种方法

    除了以上方法,还有其他获取路径的方式,例如使用`new File()`构造函数创建File对象,或者在EJB和Spring框架中,通过特定的容器API来获取路径。 在实际开发中,根据需求选择合适的路径获取方式至关重要。例如,如果...

    Spring MVC不能直接接收list类型参数的问题

    这种方法适用于 JSON 格式的请求体,通过 `@RequestBody` 注解,Spring MVC 可以自动将请求体中的 JSON 数据转换为 Java 对象。 #### 总结 以上介绍了三种解决 Spring MVC 无法直接接收 List 类型参数的方法。这些...

    spring中的bean

    在Java企业级开发中,Spring框架扮演着至关重要的角色,它是现代Java应用的核心组件之一。Spring框架通过提供依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)等特性,简化...

    SPRING MVC 的请求参数获取的几种方法

    在上面的代码中,我们使用 @ModelAttribute 注解来获取 FORM 表单数据,并将其绑定到 Pojo 对象中。 3. 直接使用 HttpServletRequest 获取请求参数 在 SPRING MVC 中,也可以直接使用 HttpServletRequest 对象来...

    技术文档JAVAspring

    1. 请求对象(request):用于获取请求信息。 2. 响应对象(response):用于设置响应信息。 3. 页面上下文对象(pageContext):提供对其他对象的全局访问。 4. 会话对象(session):用于存储用户会话数据。 5. ...

    GraphQL Java Practice with Spring Boot

    在本教程中,我们将探讨如何使用Java和Spring Boot构建一个GraphQL服务器,这将涉及GraphQL Java的基本用法、Schema定义、DataFetcher以及TypeResolver等关键概念。首先,确保你对GraphQL、Spring Boot和Java有一定...

    java 获取HttpRequest Header的几种方法(必看篇)

    在Java Web开发中,获取HttpRequest Header的信息是常见的需求,特别是在实现单点登录(Single Sign-On, SSO)或者处理跨域请求时。本篇文章将详细讲解如何在Java中获取HttpRequest Header的各种方法,这对于理解Web...

Global site tag (gtag.js) - Google Analytics