[英]Are static members shared across applications in a Java EE compliant servlet container?
如果我有一个 Servlet class,并且这个 class 用于两个应用程序 - static 的成员是否在两个应用程序之间共享? 此行为是由 Java EE 还是特定于容器指定的?
如果我有一个 Servlet class,并且这个 class 用于两个应用程序 - static 的成员是否在两个应用程序之间共享?
不,static 成员不会在应用程序之间共享。 通常,每个应用程序都将与它自己的类加载器相关联,因此,Servlet class 将在容器中加载两次。 通过推断,static 成员不会在应用程序之间共享。
如果您需要跨应用程序共享数据,建议使用文件、JMS 队列或数据库,具体取决于您的需要。
此行为是由 Java EE 还是特定于容器指定的?
Java EE 6 平台规范未定义 class 加载行为。 该规范在这方面规定了以下内容:
EE.8.3 Class 加载要求
Java EE 规范故意没有定义 Java EE 产品必须使用的 class 装载机的确切类型和布置。 相反,规范根据哪些类必须或不能对组件可见来定义要求。
对组件可见的类和资源,不包括来自其他应用程序中其他 web 模块的类。 它们可能包括同一应用程序的其他 web 模块中的类和资源:
EE.8.3.1 Web 集装箱 Class 装载要求
...
web 容器中的组件可以访问以下类和资源。 可移植应用程序不能依赖于是否可以访问这些类或资源。
• 如上所述,同一ear 文件中包含的任何其他web 模块可访问的类和资源。
...
通过推断,Servlet class 如果部署在两个不同的应用程序中,将无法访问另一个应用程序中的另一个 class。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.