文档章节

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

ThinkGem
 ThinkGem
发布于 2016/07/17 16:16
字数 314
阅读 249
收藏 1

 

看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对象了。

 

本文转载自:http://thinkgem.iteye.com/blog/2150947

共有 人打赏支持
ThinkGem

ThinkGem

粉丝 1056
博文 138
码字总数 24109
作品 2
济南
架构师
私信 提问
聊一聊Spring中的线程安全性

Spring与线程安全 Spring作为一个IOC/DI容器,帮助我们管理了许许多多的“bean”。但其实,Spring并没有保证这些对象的线程安全,需要由开发者自己编写解决线程安全问题的代码。 Spring对每个...

SylvanasSun
10/29
0
0
3.2 Spring AOP的设计与实现

JVM的动态代理特性 在Spring AOP实现中,使用的核心技术是动态代理,这实际上是JDK的一个特性(JDK1.3以上的版本有这个特性)。通过JDK的动态代理特性,可以为任意Java对象创建代理对象,对于...

edwardGe
05/30
0
0
注入或获取spring上下文的几种方式

方式一:通过ApplicationContextAware 注入 注意:一定要给类SpringContext 增加注解@org.springframework.context.annotation.Configuration or @ Service 方式二:通过WebApplicationContext......

黄威
11/30
0
0
8 个面试被问烂的 SpringMVC 过程

SpringMVC ,这个应该是国内面试必问题,网上有很多答案,其实背背就可以。但今天笔者带大家一起深入浅出源码,看看他的原理。以期让印象更加深刻,面试的时候游刃有余。 Spring MVC 过程 先...

Java干货分享
11/19
0
0
Spring核心——资源数据管理

在Profile管理环境一文中介绍了环境的概念以及Spring Profile特性控制Bean的添加。本文将进一步介绍Spring管理和控制操作系统变量、JVM变量和Java标准资源(properties文件)的相关功能。 文...

随风溜达的向日葵
08/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java提高班(六)反射和动态代理(JDK Proxy和Cglib)

反射和动态代理放有一定的相关性,但单纯的说动态代理是由反射机制实现的,其实是不够全面不准确的,动态代理是一种功能行为,而它的实现方法有很多。要怎么理解以上这句话,请看下文。 一、...

王磊的博客
21分钟前
1
0
Ext grid 渲染

// 单元格字体颜色渲染function renderer_Meta_useStatus(value, cellmeta, record,rowIndex, columnIndex, store){ var color = ""; if("空闲"==value){ color = "green";......

MoksMo
30分钟前
4
0
log4j2在spring中的配置

<?xml version="1.0" encoding="UTF-8"?><!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --><!--Configuration后面的status,这个用于设置l......

TonyTaotao
36分钟前
3
0
java 中间变量缓存机制(i++,++i)

public class Test { public static void main(String[] args) { int i = 0; i = i ++ ; System.out.println(i); } } 答案是 0 如果是 i = ++......

shzwork
43分钟前
5
0
初识多线程及其原理-笔记

什么情况下应该使用多线程? 通过并行计算提高程序执行性能 需要等待网络、I/O响应导致耗费大量的执行时间, 可以采用异步线程的方式来减少阻塞 tomcat7 以前的io模型 客户端阻塞 线程级别阻...

Java搬砖工程师
54分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部