Servlet上下文范围与全局变量

将变量存储在ServletContext中和将其作为类之一的公共静态成员之间有什么区别(如果有)?

而不是写:

// simplified (!)

int counter = (Integer)getServletContext().getAttribute("counter");

counter++;

this.getServletContext().setAttribute("counter", counter);

为什么不拥有:

// in class MyServlet

public static int counter = 0;

// in a method somewhere

MyServlet.counter++;

(请忽略并发问题,这只是一个愚蠢的示例)

据我所知,这两个选项在Tomcat下的行为相同。使用第一个选项有什么更好的选择吗?

回答:

Web容器知道您的servlet上下文,但不知道您的静态变量如skaffman所说的是您的类加载器私有的。

导致不同类加载器中的应用程序实例满足两个不同请求的任何事情(这可能是服务器重新启动,Web应用程序重新部署或多节点服务器)都会使您的逻辑中断。当Web容器知道它并可以序列化它或具有一个公共存储库时,servlet上下文将在这些情况下幸免。

以上是 Servlet上下文范围与全局变量 的全部内容, 来源链接: utcz.com/qa/416318.html

回到顶部