Java+Servlet+Specification - - ++Version+2.3(5)

2019-03-15 12:20

接口上的getResource或getResourceAsStream方法访问。因此,开发人员如果需要在servlet代码访问,又不希望暴露给客户机的信息,他可以放置在此目录。WEB-INF目录的内容有: ./WEB-INF/web.xml

./WEB-INF/classes/目录存储servlet和应用类,这些类必须可以对application class loader是可用的。

./WEB-INF/lib/*.jar存储java存档文件,这些文件包含servlet,bean,和其他可用类。application class loader必须也能装载这些存档文件中的类。 装载次序是先WEB-INF/classes目录,再WEB-INF/lib目录。

9.6 web应用存档文件

web应用可以使用标准java存档工具打包为war文件.

9.7 web 应用配置描述 应该包含以下内容:

.ServletContext 初始化参数 .会话配置

.Servlet / JSP定义 .Servlet / JSP映射 .MIME类型映射 .Welcome文件列表 .Error页面 .Security

9.7.1 扩展依赖

当大量的应用使用相同的代码和资源,它们在容器中一般被安装为库文件。这些文件通常是通用或标准的API.

应用开发人员需要知道web容器上安装了什么扩展部件,容器则需要知道servlet依赖什么样的库。web容器应有一种机制,让web应用可以知道JAR文件包含的资源与代码是可用的,并使它们为应用所用。容器应当提供一种简便的过程可以编辑配置库文件或是扩展部分。

推荐开发人员在war文件中使用META-INF/MANIFEST.MF列出扩展部分。若web容器不能满足这种方式声明的依赖,它必须拒绝应用程序,并给出错误信息。

9.7.2 web应用classloader

容器用来装载WAR中的servlet的Classloader必须允许开发人员以J2SE语义使用getResource装载任何包含在war中JAR库内的资源。必须防止war覆盖J2SE或java servlet API类。该classloader应该不允许servlet访问web容器的实现类。推荐让应用类装载器优先装载WAR中的类和资源,再装载JAR中的类和资源。

9.8 替换web应用

服务器应该能够在不重新启动容器的情况下替换一个web应用。当应

用被替换时,容器应当保持会话数据。

9.9 错误处理

9.9.1 request属性

web应用必须能够指定错误发生时应用使用的其他资源,这些资源的规范在配置描述中叙述。

如果错误定位为servlet或JSP页面,下列request属性必须设定:

Request Attributes Type javax.servlet.error.status_code java.lang.Integer javax.servlet.error.exception_type java.lang.Class

javax.servlet.error.message java.lang.String javax.servlet.error.exception java.lang.Throwable javax.servlet.error.request_uri java.lang.String javax.servlet.error.servlet_name java.lang.String

这些属性允许servlet产生一个描述详细错误信息的页面。

9.9.2 错误页面

当sertvlet产生错误时,为了允许开发人员定制返回客户机的页面,配置描述文件中定义了一系列错误页面的描述。该语法允许容器返回配置的资源,或者当servlet设置状态码来表明response的错误,或者servlet产生传播到容器的异常和错误.

若在response上设置了表明错误的状态码,容器参考错误页面声明的列表,试图取得一个匹配的结果.

servlet处理请求时可以抛出下列异常:

.runtime exceptions or errors

.ServletExceptions or subclasses thereof .IOExceptions or subclasses thereof

web应用也可以使用exception-type元素声明错误页面.容器通过比较所抛出的异常和错误页面中exception-type元素的定义,返回匹配的资源.在类层次最接近的将获得匹配.如果得不到匹配,将抛出ServletException或subclass thereof,容器将展开被包装的异常.A second pass is made over the errorpage declarations, again attempting the match against the error page declarations,but using the wrapped exception instead.

exception-type元素必须是exception-type的class名称唯一.类似的,status-code元素的状套码也必须是唯一的.

错误页面机制不回干扰使用RequestDispatcher调用的servlet发生错误. 如果servlet产生的错误没有错误页处理,容器将会产生状态码为500的response.

9.10 WelCome file

开发人员可以在配置描述文件中定义一个welcaome文件的顺序列表.本机制的目的是允许开发人员制定目录入口的缺省资源,如目录缺省资源未定义,那么到目录入口的请求将返回一个404的response.

9.11 web应用环境

J2EE定义了命名环境,允许应用很容易地访问资源和外部信息,webu需要显式了解外部信息具体是如何命名和组织的.

正如servlet是J2EE技术的一个组件,也制定允许servlet获得资源和EJB的引用的规范,这些元素是:

.env-entry .ejb-ref

.ejb-local-ref .resource-ref .resource-env-ref

( 本节略)

第十章 应用生命周期事件

10.1 介绍

本规范支持应用级别的事件.这些应用事件给了开发人员更大的控制能力,比使用ServletContext和HttpSession对象.

10.2 事件监听器

应用事件监听器是实现了一个或多个和servlet 事件监听接口的类,在web应用被发布的时候被实例化并在web容器中注册。它们应由开发人员提供。

Servlet事件监听器支持当ServletContext和HttpSession对象的状态改变时,进行事件通知。servlet context监听器用来管理应用程序的虚拟机级的资源和状态。HTTP会话监听器用来管理应用程序中与某个客户机或用户关联的一些列请求的资源与状态。

对于每种事件类型,可能有多个监听器监听它们。开发人员也可以指定容器调用监听器的顺序。

10.3 事件类型与监听器接口

事件类型 描述 监听器接口

__________________________________________________________________________________________

Servlet Context 事件

生命周期 servlet context 刚刚被创建 javax.servlet.ServletContextListener

它准备好处理它的第一个请求

或者context即将被关闭

属性改变 servlet context上的属性已经 javax.servlet.ServletContextAttributesListener 被添加,删除,替换

____________________________________________________________________________________

HTTP会话事件 生命周期 HttpSession对象已经被创建, javax.servlet.http.HttpSessionListener 实效,或过期

属性改变 HttpSession对象上的属性已经 javax.servlet.HttpSessionAttributesListener 被添加、删除或替换

10.2.2 使用监听器的例子

为举例说明事件的使用,我们假定一个简单的web应用,包含很多用到数据库的servlet。开发人员已提供了一个servlet context监听器管理数据库联接。

1.当应用启动,监听器类被通知,应用登陆数据库,并将联接存储在servlet context内。

2.web应用中的servlet可以在需要的时候访问该联接。

3.当web服务器关闭,或者web应用被删除,该监听器被通知,接着数据库联接被关闭。

10.3 监听器类配置

10.3.1 提供监听器类

应用开发人员听实现以上四个接口的监听器类,每个类必须有不带参数的公共构造函数。该类被打包进WAR中,也可以放在WEB-INF/classes目录下或者是WEB-INF/lib下的JAR中。

10.3.2 发布声明

在web应用配置描述文件中,使用listener元素声明监听器类。以类名按照调用的顺序被列出。

10.3.3 注册监听器

web容器在应用处理第一个请求前,创建每个监听器的实例并注册它。容器根据监听器实现的接口以及在配置描述文件中的顺序注册实例。容器以监听器注册的顺序执行它们。

10.3.4 关闭时通知

当应用被关闭时,监听器以声明时相反的顺序得到通知,,先处理会话监听,然后是context监听.

10.4 Example

下面例子是关于如何注册两个servlet context 监听器和一个 会话监听器的语法.

假定com.acme.MyConnectionManager和com.acme.MyLoggingModule都实现了javax.servlet.ServletContextListener,并且com.acme.MyLoggingModule

还实现了javax.servlet.HttpSessionListener,以下是配置描述:

MyListeningApplication

com.acme.MyConnectionManager

com.acme.MyLoggingModule

RegistrationServlet

10.5 监听器实例与线程

容器需要在应用程序处理第一个请求之前,完成实例化监听器类.在完成最后一个服务请求之前,容器必须维护每个监听器实例的引用.

ServletContext和HttpSession属性的改变是可以并发的.对属性监听器通知,容器不需要同步.维持状态的监听器类有责任保持数据的完整性,并应当明确地处理这种情况.

10.6 分布式容器

在分布式web容器中,HttpSession实例存在于处理该会话的请求的特定虚拟机范围,ServletContext对象的范围则在web容器所在的虚拟机内.分布式容器不需要将servlet context和session上的 事件传播到其他虚拟机.监听器实例范围则在每个虚拟机上的每个部署声明对应一个.

10.7 会话事件


Java+Servlet+Specification - - ++Version+2.3(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:三点法 比例导引法 课程设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: