Web 应用

优质
小牛编辑
136浏览
2023-12-01

Web 应用 Class Loader

Servlet 容器是一个 Java EE 产品的一部分,不应该允许应用程序重写Java SE 或 Java EE 平台的类,比如那些在 Java. 和 javax. 命名空间中的类,Java SE 或 Java EE 不允许被修改。

Web 应用程序环境

Java EE 定义了一个命名的环境,允许应用程序在没有明确的知道外部信息是如何命名和组织的情况下轻松地访问资源和外部信息。

由于 servlet 是 Java EE 技术的一个完整的组件类型,已经在Web应用程序部署文件中规定了允许 servlet 获取引用资源和企业 bean 的指定信息。此包含信息的的部署元素有:

  • env-entry
  • ejb-ref
  • ejb-local-ref
  • resource-ref
  • resource-env-ref
  • service-ref
  • message-destination-ref
  • persistence-context-ref
  • persistence-unit-ref

开发人员使用这些元素来描述在 Web 容器中运行时 Web 应用程序需要在JNDI命名空间中注册的某些对象。

Java EE 规范第5章中描述了关于Java EE环境设置的要求 Servlet 容器属于Java EE技术标准实现的一部分,它必须支持这种语法。查阅 Java EE 规范可获取更多详细信息。这种类型的 servlet 容器必须支持查找这种对象并在受 servlet 容器管理的线程上执行时调用这些对象。当在开发人员创建的线程上执行时,这种类型的 servlet 容器应该支持这种行为,但目前没有要求这样做。这样的规定将被添加到本规范的下一个版本中。开发人员应该小心,不推荐应用程序创建的线程依赖这种能力,因为它是不可移植的。

Web模块上下文根URL的JNDI名称

Java EE平台规范定义了一个标准化的全局JNDI命名空间和一系列相关的命名空间映射到不同的Java EE应用程序范围。应用程序可以使用这些命名空间可移植地检索组件和资源的引用。本节定义的Web应用程序的基本URL是需要注册的JNDI名称。

为一个Web应用程序上下文根目录预定义的java.net.URL资源的名称的语法如下:

全局命名空间中

java:global[/<app-name>]/<module-name>!ROOT

,应用程序指定的命名空间中

java:app/<module-name>!ROOT

确定应用程序名称和模块名称的规则请参阅Java EE规范8.1.1节(组件创建)和 8.1.2节(应用程序组装)。

只有当Web应用打包成一个.ear文件时才适合使用<app-name>

java:app 前缀允许一个组件内执行的Java EE应用程序来访问特定于应用程序的命名空间。java:app名称允许一个企业应用程序中的模块引用同一个企业应用程序中其他模块的上下文根目录。<module-name>是java:app url语法的必要组成部分。

示例

然后,可以在应用程序使用上述的URL,如下:

如果Web应用程序使用模块名称myWebApp独立部署。URL可被注入到另一个web模块,如下:

CODE EXAMPLE 15-1

@Resource(lookup=“java:global/myWebApp!ROOT”)
URL myWebApp;

当打包到一个名为myApp的EAR文件中时,可像下面这样使用:

CODE EXAMPLE 15-2

@Resource(lookup=“java:global/myApp/myWebApp!ROOT”)
URL myWebApp;