通过ThreadLocal解决servlet请求内部各类之间共享request等对象
场景如下:在java后台处理业务的时候,需要调用当前登录用户的一些信息,一般情况下的做法是,在登录的时候,把登录对象放到HttpSession对象中,在需要调用的时候,从request或者session对象中获取,但是这种方式直适用于servlet或者action中调用,只有此处才能获取到request或session对象。如果需要在一个被调用的业务类中获取,则无法行得通。 分析:其实只需要找到一种可以讲request对象缓存,同时又可以在业务类中获取,即可解决上述问题。面对此问题,我参考了下OSCHINA的源码, http://www.oschina.net/code/snippet_12_2 ,其中很关键的一段代码如下: private final static ThreadLocal<RequestContext> contexts = new ThreadLocal<RequestContext>(); 而这个ThreadLocal类究竟是干什么用的呢,看下面这篇文章: http://www.iteye.com/topic/103804 文章内容将的很清楚,关于 ThreadLocal的用法,甚至举了hibernate中session管理的例子,咋一看,确实很容易搞晕,但是从下面的有一个回复内容,可以很清晰的明白这个类能干嘛: 或者可以自己定义一个静态的map