我想我的问题是,JSP被编译成一个服务于多个请求的servlet实例。如何使其线程安全?
答案 0 :(得分:4)
Servlet是不可变的。在方法调用之外不存在任何状态(servlet是无状态的),或者任何这样的状态永远不会改变(因此每个线程看到的状态总是相同的)。
编写线程安全的servlet非常简单:从不使用实例变量。使用方法局部变量。
答案 1 :(得分:2)
不要将请求/会话特定数据分配为全局/静态变量。因此,只要您不使用您为请求/会话特定数据分配的 scriptlet 声明<%! %>
,并且您不将请求/会话数据放在应用程序范围内(即作为属性ServletContext
),那你就安全了。
答案 2 :(得分:1)
试试这个:&lt;%@ page isThreadSafe =“true”%&gt;
答案 3 :(得分:1)
将JSP编译为servlet。所有JSP变量都是方法本地(堆栈)变量,因此它们是线程安全的。
如果直接向servlet类添加一个thread-unsafe属性,它将不再是线程安全的。