Java EE兼容的Servlet容器中,静态成员在应用程序之间共享吗?

4
如果我有一个Servlet类,并且这个类在两个应用程序中使用 - 静态成员是否跨越两个应用程序共享? 这种行为是由Java EE规范还是容器特定的?
1个回答

7
如果我有一个Servlet类,并且该类在两个应用程序中使用 - 那么静态成员是否在两个应用程序之间共享?
不,静态成员不会在应用程序之间共享。通常,每个应用程序都将与其自己的类加载器相关联,因此,在容器中,Servlet类将被加载两次。根据推断,静态成员将不会在应用程序之间共享。
如果您需要在应用程序之间共享数据,则建议根据您的需求使用文件、JMS队列或数据库。
这种行为是由Java EE还是容器特定指定的?
Java EE 6平台规范没有定义类加载行为。规范在这方面陈述如下:
EE.8.3 类加载要求 Java EE 规范故意未定义 Java EE 产品必须使用的类加载器的确切类型和排列方式。相反,规范根据组件必须或不得可见的类别来定义要求。
对组件可见的类和资源不包括其他应用程序中的其他Web模块的类。它们可能包括同一应用程序的其他Web模块中的类和资源:
EE.8.3.1 Web 容器类加载要求 Web 容器中的组件可以访问以下类和资源。便携式应用程序不能依赖于具有或不具有对这些类或资源的访问权限。
• 与同一 ear 文件中包含的任何其他 Web 模块可访问的类和资源,如上所述。 根据推断,如果在两个不同的应用程序中部署 Servlet 类,则将无法访问另一个应用程序中的其他类。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接