1.ThreadLocal即线程局部存储,当前线程只能访问到本线程中设置的变量
2.应用服务器收到一个用户请求后,总是分配一个独立的线程对该请求进行处理,考虑到频繁创建和销毁线程的开销太大,一般应用服务器都会有一个高效的线程池系统来回收已完成处理的请求线程,也就是说当某个请求被处理完后,相应线程并不会被销毁,而是被返回到线程池中以再次响应其它请求。即一个请求为一个线程。
3.如果用户信息存在session中我们可以把用户信息通过过滤器放到ThreadLocal中,这样在这个请求中就可以方便的取出用户信息了(脱离request,session等web对象的约束,还可在aop中获得当前用户)。但是这里有一个问题要注意,由于服务器采用的是线程池,请求结束后线程并没有销毁,下个请求可能会获得相同的线程(ThreadLocal中还保留上个用户的信息,若请求不经过filter,这会获取到上个用户信息导致错误),所以在filter中要在请求结束后删除用户信息,以保证用户信息不泄露。
[size=large]参考:http://www.iteye.com/topic/156378[/size]
2.应用服务器收到一个用户请求后,总是分配一个独立的线程对该请求进行处理,考虑到频繁创建和销毁线程的开销太大,一般应用服务器都会有一个高效的线程池系统来回收已完成处理的请求线程,也就是说当某个请求被处理完后,相应线程并不会被销毁,而是被返回到线程池中以再次响应其它请求。即一个请求为一个线程。
3.如果用户信息存在session中我们可以把用户信息通过过滤器放到ThreadLocal中,这样在这个请求中就可以方便的取出用户信息了(脱离request,session等web对象的约束,还可在aop中获得当前用户)。但是这里有一个问题要注意,由于服务器采用的是线程池,请求结束后线程并没有销毁,下个请求可能会获得相同的线程(ThreadLocal中还保留上个用户的信息,若请求不经过filter,这会获取到上个用户信息导致错误),所以在filter中要在请求结束后删除用户信息,以保证用户信息不泄露。
finally {
//从ThreadLocal中清除用户信息
}
[size=large]参考:http://www.iteye.com/topic/156378[/size]