【发布时间】:2011-03-22 20:16:18
【问题描述】:
我想我的问题是,一个 JSP 被编译成一个服务于多个请求的 servlet 实例。我如何使它成为线程安全的?
【问题讨论】:
我想我的问题是,一个 JSP 被编译成一个服务于多个请求的 servlet 实例。我如何使它成为线程安全的?
【问题讨论】:
Servlet 是不可变的。要么在方法调用之外不存在任何状态(servlet 是无状态的),要么任何此类状态永远不会改变(因此每个线程看到的状态始终相同)。
编写线程安全的 servlet 非常简单:从不使用实例变量。使用方法局部变量。
【讨论】:
只是不要将特定于请求/会话的数据分配为全局/静态变量。因此,只要您不使用 scriptlet 声明 <%! %> 分配请求/会话特定数据并且您不将请求/会话数据放在应用程序范围内(即作为 @987654324 的属性@),那么你就安全了。
【讨论】:
试试这个:
【讨论】:
JSP 被编译成 servlet。所有 JSP 变量都是方法本地(堆栈)变量,因此它们是线程安全的。
如果你直接将线程不安全属性添加到 servlet 类,它将不再是线程安全的。
【讨论】: