繁体   English   中英

static 成员是否在 Java EE 兼容的 servlet 容器中跨应用程序共享?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM