Global variable on servlet. is global for all sessions, or only for the current session?
我需要在应用程序运行时共享信息;如果我有:
1 2 3 4 5 6 7 |
一个用户正在通过服务器和对象globalObject使用应用程序;如果另一个用户使用该应用程序,将与第一个用户共享该对象吗?
A user is using the aplication through server and the object globalObject; if another user use the application, will share the object with the first user?
对!不同的线程可能用于为不同的用户呈现请求,但使用了相同的servlet实例。因此,是的,变量对所有请求都是通用的。事实上,这就是为什么人们说我们不应该有全局变量
一般来说,线程是单件的,所以问题的答案是肯定的。但是,如果您想要在不同的用户之间共享数据,那么应该使用真正的单例实现。还要考虑并发性,因为您肯定有许多线程同时执行(服务器接收到的每个请求一个线程)。
这取决于应用服务器如何分配servlet。
如果您的应用程序服务器只分配一个servlet实例,那么是的,所有请求都将共享对全局变量的访问权,并且您必须在设计中考虑到这一点(除非您选择实现不推荐使用的
如果应用服务器分配了多个servlet实例,那么答案是"不一定"。
显然,您经常被蒙蔽在服务器的决定之外(关于是否实例化多个实例),因此您必须为安全而设计。
通过httpsession,变量将与每个用户会话相关,而不是与应用程序本身相关。
你可以这样做
1 2 3 4 5 6 |
是否可以执行JSP代码:
1 | <jsp:useBean id="obj" class="my.package.name.MyClass" scope="application" /> |
servlet处理的所有请求都将使用该变量的相同实例。servlet不是线程安全的,因为只创建了servlet的一个实例。
这将导致两个用户使用同一个