静态成员是否在符合 Java EE 的 Servlet 容器中的应用程序之间共享?

发布于 2024-11-24 23:05:23 字数 85 浏览 0 评论 0原文

如果我有一个 Servlet 类,并且该类在两个应用程序中使用 - 静态成员是否在两个应用程序之间共享? 此行为是 Java EE 指定的还是特定于容器的?

If I have a Servlet class, and this class is used in two applications - are static members of shared across both applications?
Is this behaviour specified by Java EE or container specific?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

千纸鹤带着心事 2024-12-01 23:05:23

如果我有一个 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 类如果部署在两个不同的应用程序中,将无法访问另一个应用程序中的另一个类。

If I have a Servlet class, and this class is used in two applications - are static members of shared across both applications?

No, the static members will not be shared across applications. Typically, each application would be associated with its own classloader, and hence, the Servlet class would be loaded twice in the container. By inference, static members would not be shared across the applications.

If you need to share data across applications, it is recommended to use files, JMS queues or a database, depending on your needs.

Is this behaviour specified by Java EE or container specific?

The Java EE 6 Platform specification does not define class loading behavior. The specification states the following in this regard:

EE.8.3 Class Loading Requirements

The Java EE specification purposely does not define the exact types
and arrangements of class loaders that must be used by a Java EE
product. Instead, the specification defines requirements in terms of
what classes must or must not be visible to components.

Classes and resources that are visible to components, do not include classes from other web modules in other applications. They might include classes and resources in other web modules of the same application:

EE.8.3.1 Web Container Class Loading Requirements

...

Components in the web container may have access to the following
classes and resources. Portable applications must not depend on having
or not having access to these classes or resources.

•The classes and resources accessible to any other web modules included in the same ear
file, as described above.

...

By inference, the Servlet class, if deployed in two different applications, will not be able to access the other class in the other application.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文