`
thinkgem
  • 浏览: 580334 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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

阅读更多

 

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

 

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

 

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

 

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

 

操作方法如下:

 

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

 

<listener>
	<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>  
</listener>

 

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

  

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
/**
 * 获取当前请求对象
 * @return
 */
public static HttpServletRequest getRequest(){
	try{
		return ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
	}catch(Exception e){
		return null;
	}
}

 

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

 

分享到:
评论
5 楼 discovercong 2016-10-10  
好文章,解决了我的问题,谢谢。
4 楼 jingchh 2016-07-05  
3 楼 haolianshuai 2015-01-21  
雨辰哥,真牛逼
2 楼 li4haoo 2014-11-26  
我很想懂啊,可是我看不懂,能不能具体一点形容一下
1 楼 g4_gc 2014-11-11  
好文,正在找这个,居然在这里找到 佩服~

相关推荐

    Spring-Reference_zh_CN(Spring中文参考手册)

    12.2.2. 在Spring的application context中创建 SessionFactory 12.2.3. HibernateTemplate 12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. ...

    spring框架技术+第2天+xmind思维导图

    spring框架技术+第2天+xmind思维导图:生命周期,介绍simple project,打印出构造方法...bean作用域request session globalSession:web项目获取核心配置文件要配置两个地方:spring监听器、spring作用域范围的监听。

    java面试宝典

    182、Request对象的主要方法 43 183、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 43 184、Servlet执行时一般实现哪几个方法? 44 185、getServletContext...

    spring security 参考手册中文版

    12.2.3使用RequestPostProcessor在Spring MVC测试中以用户身份运行 106 作为用户在Spring MVC测试中使用注释运行 108 12.2.4测试HTTP基本认证 109 12.3 SecurityMockMvcRequestBuilders 109 12.3.1测试基于表单的...

    java设计模式【之】外观模式【源码】【场景:积分兑换图书】

    java设计模式【之】外观模式【源码】【场景:积分兑换图书】 ... * 复杂的实现由 RequestFacade 完成,对外由Request类作为外观与用户交互,获取HttpServletRequest 对象 * Response 和 session 也是同样的实现形式

    springmybatis

    MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...

    ssh(structs,spring,hibernate)框架中的上传下载

    首先数据表中的Blob字段在Java领域对象中声明为byte[]类型,而非java.sql.Blob类型。  2.数据表Blob字段在Hibernate持久化映射文件中的type为org.springframework.orm.hibernate3.support.BlobByteArrayType,即...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用、Spring核心之IoC、...

    Java EE常用框架.xmind

    将JavaBean对象封装到Document对象中 后通过IndexWriter把document写入到索引库中 当用户需要查询的时候,就使用IndexSearcher从索引库中读取数据,找到对应的Document对象,从而解析里边的内容 最后将...

    java面试题

    45. Request对象的主要方法: 21 46. jsp有哪些动作?作用分别是什么? 21 47. 两种跳转方式分别是什么?有什么区别? 22 48. get和post的区别? 22 49. JDK,JRE,JVM的区别? 22 50. Java中常见类,方法,接口 23 51. 多...

    EL表达式 (详解)

    在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得 其他相关信息。 例如:我们要取得session中储存一个属性username的值,可以利用下列方法: session.getAttribute(...

    java微信公众号MVC开发框架

    foo方法上面有@TextMsg注解,是定义的微信方法,在Servlet启动时通过包扫描加载到微信上下文对象中。jwx针对微信消息或事件类型设计了一组微信注解,基本涵盖了微信公众号定义的消息和事件类型。 @TextMsg是文本...

    千方百计笔试题大全

    182、Request对象的主要方法 43 183、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串? 43 184、Servlet执行时一般实现哪几个方法? 44 185、getServletContext...

    基于Spring的HttpInvoker实现改写egova_invoker.zip

    ProxyFactory.proxy 方法,生成接口的代理对象,直接调用方法客户端和服务器端的接口和实体类要一致,实体类必须是可以序列化的比如:定义Bean: public class DemoBean implements java.io.Serializable{ ...

    struts1和struts2的区别

    Struts 2无须继承任何类型或实现任何接口,表单数据包含在Action中,通过Getter和Setter获取。 虽然,在理论上Struts2的Action无须实现任何接口或者是继承任何的类,但是,在实际编程过程中,为了更加方便的实现...

    word源码java-Spring-MyBatis-RedisCache:SpringBoot整合MyBatis/通用mapper/Druid

    在aop方法等处,获取到request对象 HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); 奇淫巧技 在github上随便看的xpay项目中的,

    基于SSM框架+Mysql的企业CRM客户关系管理系统项目源码+数据库+项目说明.zip

    从axios返回给Java的json对象中的数组是一个List对象而不是一个数组,在controller中强转一下可以直接传入service 3. Mybatis,foreach标签中的collection属性应该填list,表示的是List类型 ### 2022/4/9 - ...

Global site tag (gtag.js) - Google Analytics