Servlet3.1规范翻译——与其它规范有关的要求
与其它规范有关的要求
本章列出对web容器的要求,它已经包含在容器产品中了,还包括其他Java技术。
下面章节中任何涉及到Java EE应用的profile,不只是完整的Java EE profile,还包括任何支持Servelt的profile,像Java EE Web Profile。有关配置文件的更多信息,请参阅Java EE平台规范。
15.1 会话
属于Java EE实现的分布式servlet容器必须支持其他Java EE对象从一个JVM迁移到另一个JVM所必需的机制。
15.2 Web应用程序
15.2.1 Web应用程序类加载器
Servlet容器是一个Java EE产品的一部分,不应该允许应用程序重写Java SE或Java EE平台的类,比如那些在Java.*和javax.*命名空间中的类,Java SE或Java EE不允许被修改。
15.2.2 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容器应该支持这种行为,但目前没有要求这样做。这样的规定将被添加到本规范的下一个版本中。开发人员应该小心,不推荐应用程序创建的线程依赖这种能力,因为它是不可移植的。
15.2.3 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模块,如下:
代码示例 15-1
- @Resource(lookup=“java:global/myWebApp!ROOT”)
- URL myWebApp;
当打包到一个名为myApp的EAR文件中时,可像下面这样使用:
- 代码示例 15-2
- @Resource(lookup=“java:global/myApp/myWebApp!ROOT”)
- URL myWebApp;
15.3 安全性
本节详细介绍了Web容器包含在一个产品中时额外的安全性要求,还包含EJB、JACC和(或)JASPIC。以下各节将介绍这些要求。
15.3.1 EJB™调用传播的安全标识
必须始终提供的安全标识,用于调用一个企业bean。从Web应用程序中调用企业Bean的默认模式是为把Web用户的安全标识传播到EJB容器。
在其他情况下,Web容器必须允许不了解Web容器或EJB容器的web用户进行调用:
■ Web容器必须支持未把自己授权给容器的用户访问Web资源。这是在互联网上访问Web资源常见的模式。
■ 应用程序代码可以是单点登录和基于调用者标识的定制化数据的唯一处理器。
在这些情况下,Web应用程序部署描述文件可以指定一个run-as元素。当为Servlet指定了一个run-as角色时,Servlet容器必须传播主要的映射到该角色,作为任何从Servlet到EJB调用的安全标识,包括从Servlet的init和destory方法进行原始调用。安全角色名必须是为Web应用程序定义的安全角色名称之一。
由于Web容器作为Java EE平台的一部分运行,在同一个Java EE应用程序中调用EJB组件,以及调用部署在其他Java EE中的应用程序都必须支持run-as元素的使用。
15.3.2 容器授权的要求
在Java EE产品中或包括支持Java容器授权合约(JAAC, i.e, JSR 115)的产品中,所有Servlet容器必须实现支持JACC。JACC规范可在此处下载http://www.jcp.org/en/jsr/detail?id=115
15.3.3 容器认证的要求
在Java EE产品中或包括支持Java容器认证SPI(JASPIC, i.e, JSR 196)的产品中,所有Servlet容器必须实现JASPIC规范的Servlet容器Profile。JASPIC规范可在此处下载http://www.jcp.org/en/jsr/detail?id=196
15.4 部署
本节将详述一个符合JavaEE技术的容器和包含支持JSP和/或Web Service的产品的部署描述符、打包和部署描述符处理的要求。
15.4.1 部署描述符元素
以下附加元素存在于Web应用程序部署描述符,用于满足Web容器开启JSP页面的要求,或作为JavaEE应用服务器的一部分。它们不需要由希望仅支持Servlet规范的容器支持:
■ jsp-config
■ 用于描述资源引用的语法 (env-entry, ejb-ref, ejb-local-ref, resource-ref, resource-env-ref)
■ 指定消息目的地的语法 (message-destination, message-destination-ref)
■ 引用Web Service (service-ref)
■ 引用持久化上下文(persistence-context-ref)
■ 引用持久化单元 (persistence-unit-ref)
这些元素的语法现在由Java服务器页面(JavaServer Pages)规范 2.2版本,和Java EE规范控制。