1.ThreadLocal即线程局部存储,当前线程只能访问到本线程中设置的变量
2.应用服务器收到一个用户请求后,总是分配一个独立的线程对该请求进行处理,考虑到频繁创建和销毁线程的开销太大,一般应用服务器都会有一个高效的线程池系统来回收已完成处理的请求线程,也就是说当某个请求被处理完后,相应线程并不会被销毁,而是被返回到线程池中以再次响应其它请求。即一个请求为一个线程。
3.如果用户信息存在session中我们可以把用户信息通过过滤器放到ThreadLocal中,这样在这个请求中就可以方便的取出用户信息了(脱离request,session等web对象的约束,还可在aop中获得当前用户)。但是这里有一个问题要注意,由于服务器采用的是线程池,请求结束后线程并没有销毁,下个请求可能会获得相同的线程(ThreadLocal中还保留上个用户的信息,若请求不经过filter,这会获取到上个用户信息导致错误),所以在filter中要在请求结束后删除用户信息,以保证用户信息不泄露。
finally {
//从ThreadLocal中清除用户信息
}
参考:http://www.iteye.com/topic/156378
分享到:
相关推荐
### Web服务器、应用服务器与Web容器 #### 一、概念解析 **Web服务器**与**应用服务器**在历史发展中逐渐融合,尽管它们最初的定义不同。Web服务器最初专注于提供静态网页内容,通过HTTP协议来实现。随着时间的发展...
在Java Web编程中,ThreadLocal与HTTP Session的概念混淆是常见的误解。虽然每个用户会话通常对应一个唯一的Session ID,但ThreadLocal并不直接与用户会话绑定。ThreadLocal是线程级别的,这意味着每个线程都有自己...
通常,这些信息会存储在服务器内存中,并通过session ID与客户端进行通信,每次请求时将session ID通过cookie发送回服务器,以便服务器识别当前请求属于哪个session。 2. **为什么使用ThreadLocal管理Session?** ...
例如,在Web应用服务器中,我们可以用ThreadLocal存储用户的会话信息,确保每个请求都访问到自己专属的数据。 ThreadLocal的使用通常包括以下步骤: 1. 创建ThreadLocal实例,声明变量类型。 2. 在需要的地方,通过...
2. **状态管理**:在多线程服务器应用中,如Web服务器,每个请求通常分配到一个单独的线程,ThreadLocal可以用来存储请求特定的状态信息。 3. **避免全局变量**:在多线程环境中,全局变量可能导致数据竞争和同步...
3. **隔离状态**:比如在Web应用服务器中,每个线程可以有独立的用户会话信息,保证数据的安全性。 尽管ThreadLocal提供了很多便利,但如果不正确地使用,可能会导致内存泄漏。当线程结束之前没有调用`remove`方法...
2.1 Web概念与Web服务器 Web,即万维网,由一系列的网站组成,提供可供人们访问的资源。这些资源分为静态资源(如HTML、CSS页面)和动态资源(如由JSP/Servlet生成的页面)。Java中,我们把动态Web资源开发技术统称...
《Nginx高性能Web服务器详解》可能是与Java并发编程实战相关的补充阅读,因为Nginx作为一个高性能的反向代理服务器,经常与Java应用服务器配合使用,优化Web服务的并发处理能力。Nginx的异步非阻塞I/O模型和事件驱动...
文档提到了使用Filter和ThreadLocal等技术来在服务器端控制数据访问。 9. 服务层(Service Layer):WEB应用中的业务逻辑通常封装在服务层,文档中提到了使用ActionService来处理请求,并且强调了过滤器(Filter)...
在Java Web开发中,Tomcat服务器作为常用的轻量级Web服务器,它负责处理来自客户端的各种请求。当用户通过HTTP协议发送请求时,Tomcat会解析请求中的参数,并将这些参数存储在一个`Hashtable`中以便后续处理。 **...
Servlet是运行在服务器端的小型Java程序,它是Java Web应用的基石。Servlet负责处理客户端请求并生成响应。网上选课系统可能会用Servlet来接收和处理选课请求,以及生成相应的HTML页面。 8. 数据库技术 报告中提及...
- **设计模式**:掌握GoF和J2EE设计模式,理解动态代理和ThreadLocal原理。 - **版本控制**:了解SCM(Software Configuration Management)。 - **数据交换**:理解XML、XSL、DTD和Schema,了解异构系统整合模式...
2. **数据库代理层**:为了实现多租户共享,我们需要在Web服务器与数据库之间引入一个代理层。在这个例子中,我们使用了Mycat,这是一个开源的分布式数据库中间件。每当Web服务器向数据库发送SQL请求时,Mycat会接收...
`ThreadLocal`的生命周期与线程的生命周期相同。因此,一旦线程结束,存储在`ThreadLocal`中的数据也会自动释放。 #### 六、应用场景示例 假设苍穹外卖系统的用户登录流程如下: 1. 用户发起登录请求。 2. 服务器...
Web服务器配置拦截器,如通过web.xml的filter或webx的pipeline,拦截流量并交由客户端公共库的分流器组件处理。分流器给流量分配相应的参数值,并使用ThreadLocal保持这些值。实验信息的埋点是另一个重要环节,需要...
- **Web服务器与应用服务器**:介绍了Apache HTTP服务器与Tomcat应用服务器的安装、配置和整合。这部分内容对于理解和部署一个Web应用的后端架构至关重要。 #### HTTPS协议应用 - **安全通信**:书中详细讲解了...
Servlet是一个Java类,遵循Servlet API规范,由Web服务器加载并执行,用于扩展服务器的功能,特别是处理客户端的HTTP请求。在本篇文章中,我们将探讨Servlet的底层实现原理,包括Servlet的生命周期、请求处理流程...
2. **第2章Servlet**:Servlet是JavaWeb开发的核心部分,用于扩展Web服务器的功能。这一章将深入讲解Servlet生命周期,包括初始化、服务、销毁等阶段,以及如何通过doGet和doPost方法处理HTTP请求。此外,还会涉及...
实战:简易web服务器(一).mp4 实战:简易web服务器(二).mp4 JDK8的新增原子操作类LongAddr原理与使用.mp4 JDK8新增锁StampedLock详解.mp4 重排序问题.mp4 happens-before简单概述.mp4 锁的内存语义.mp4 volatile...