1 定义头和根元素部署描述符文件就像所有xml文件一样,必须以一个XML头开始。这个头声明可以使用的XML版本并给出文件的字符编码。 DOCYTPE声明必须立即出现在此头之后。这个声明告诉服务器适用的servlet规范的版本(如2.2或2.3)并指定治理此文件其余部分内容的语法的DTD(Document Type Definition,文档类型定义)。 所有部署描述符文件的顶层(根)元素为web-app。请注重,XML元素不像Html,他们是大小写敏感的。因此,web-App和WEB-APP都是不合法的,web-app必须用小写。2 部署描述符文件内的元素次序XML元素不仅是大小写敏感的,而且它们还对出现在其他元素中的次序敏感。例如,XML头必须是文件中的第一项,DOCTYPE声明必须是第二项,而web-app元素必须是第三项。在web-app元素内,元素的次序也很重要。服务器不一定强制要求这种次序,但它们答应(实际上有些服务器就是这样做的)完全拒绝执行含有次序不正确的元素的Web应用。这表示使用非标准元素次序的web.xml文件是不可移植的。 下面的列表给出了所有可直接出现在web-app元素内的合法元素所必需的次序。例如,此列表说明servlet元素必须出现在所有servlet-mapping元素之前。请注重,所有这些元素都是可选的。因此,可以省略掉某一元素,但不能把它放于不正确的位置。 l icon icon元素指出IDE和GUI工具用来表示Web应用的一个和两个图像文件的位置。 l display-name display-name元素提供GUI工具可能会用来标记这个特定的Web应用的一个名称。 l description description元素给出与此有关的说明性文本。 l context-param context-param元素声明应用范围内的初始化参数。 l filter 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。 l filter-mapping 一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或多个servlet或jsp页面相关联。 l listener servlet API的版本2.3增加了对事件监听程序的支持,事件监听程序在建立、修改和删除会话或servlet环境时得到通知。Listener元素指出事件监听程序类。 l servlet 在向servlet或JSP页面制定初始化参数或定制URL时,必须首先命名servlet或JSP页面。Servlet元素就是用来完成此项任务的。 l servlet-mapping 服务器一般为servlet提供一个缺省的URL:http://host/webAppPRefix/servlet/ServletName。但是,经常会更改这个URL,以便servlet可以访问初始化参数或更轻易地处理相对URL。在更改缺省URL时,使用servlet-mapping元素。 l session-config 假如某个会话在一定时间内未被访问,服务器可以抛弃它以节省内存。可通过使用HttpSession的setMaxInactiveInterval方法明确设置单个会话对象的超时值,或者可利用session-config元素制定缺省超时值。 l mime-mapping 假如Web应用具有想到非凡的文件,希望能保证给他们分配特定的MIME类型,则mime-mapping元素提供这种保证。 l welcom-file-list welcome-file-list元素指示服务器在收到引用一个目录名而不是文件名的URL时,使用哪个文件。 l error-page error-page元素使得在返回特定HTTP状态代码时,或者特定类型的异常被抛出时,能够制定将要显示的页面。 l taglib taglib元素对标记库描述符文件(Tag Libraryu Descriptor file)指定别名。此功能使你能够更改TLD文件的位置,而不用编辑使用这些文件的JSP页面。 l resource-env-ref resource-env-ref元素声明与资源相关的一个治理对象。 l resource-ref resource-ref元素声明一个资源工厂使用的外部资源。 l security-constraint security-constraint元素制定应该保护的URL。它与login-config元素联合使用 l login-config 用login-config元素来指定服务器应该怎样给试图访问受保护页面的用户授权。它与sercurity-constraint元素联合使用。 l security-role security-role元素给出安全角色的一个列表,这些角色将出现在servlet元素内的security-role-ref元素的role-name子元素中。分别地声明角色可使高级IDE处理安全信息更为轻易。 l env-entry env-entry元素声明Web应用的环境项。 l ejb-ref ejb-ref元素声明一个EJB的主目录的引用。 l ejb-local-ref ejb-local-ref元素声明一个EJB的本地主目录的应用。3 分配名称和定制的UL在web.xml中完成的一个最常见的任务是对servlet或JSP页面给出名称和定制的URL。用servlet元素分配名称,使用servlet-mapping元素将定制的URL与刚分配的名称相关联。
最后一点,请记住IE5的缺省配置显然不符合HTTP规范,它忽略了服务器生成的错误消息,而是显示自己的标准出错信息。可转到其Tools菜单,选择Internet Options,单击Advanced,取消Show Friendly HTTP Error Message来解决此问题。程序清单5-13 NotFound.jsp <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD><TITLE>404: Not Found</TITLE></HEAD> <BODY BGCOLOR="#FDF5E6"> <H2>Error!</H2> I'm sorry, but I cannot find a page that matches <%= request.getRequestURI() %> on the system. Maybe you should try one of the following: <UL> <LI>Go to the server's <A HREF="/">home page</A>. <LI>Search for relevant pages.<BR> <FORM ACTION="http://www.Google.com/search"> <CENTER> KeyWords: <INPUT TYPE="TEXT" NAME="q"><BR> <INPUT TYPE="SUBMIT" VALUE="Search"> </CENTER> </FORM> <LI>Admire a random multiple of 404: <%= 404*((int)(1000*Math.random())) %>. <LI>Try a <A HREF="http://www.plinko.net/404/rndindex.asp" TARGET="_blank"> random 404 error message</A>. From the amazing and amusing plinko.net <A HREF="http://www.plinko.net/404/"> 404 archive</A>. </UL> </BODY></HTML> 程序清单5-14 web.xml(指出HTTP错误代码的错误页面的摘录) <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"><web-app> <error-page> <error-code>404</error-code> <location>/NotFound.jsp</location> </error-page> <!-- ... --> </web-app> 8.2 exception-type元素 error-code元素处理某个请求产生一个特定的HTTP状态代码时的情况。然而,对于servlet或JSP页面返回200但产生运行时异常这种同样是常见的情况怎么办呢?这正是exception-type元素要处理的情况。只需提供两样东西即可:即提供如下的一个完全限定的异常类和一个位置: <error-page> <exception-type>packageName.className</exception-type> <location>/SomeURL</location> </error-page> 这样,假如Web应用中的任何servlet或JSP页面产生一个特定类型的未捕捉到的异常,则使用指定的URL。此异常类型可以是一个标准类型,如javax.ServletException或java.lang.OutOfMemoryError,或者是一个专门针对你的应用的异常。 例如,程序清单5-15给出了一个名为DumbDeveloperException的异常类,可用它来非凡标记经验较少的程序员(不是说你的开发组中一定有这种人)所犯的错误。这个类还包含一个名为dangerousComputation的静态方法,它时不时地生成这种类型的异常。程序清单5-16给出对随机整数值调用dangerousCompution的一个JSP页面。在抛出此异常时,如程序清单5-18的web.xml版本中所给出的exception-type所指出的那样,对客户机显示DDE.jsp(程序清单5-17)。图5-16和图5-17分别给出幸运和不幸的结果。程序清单5-15 DumbDeveloperException.java package moreservlets;/** Exception used to flag particularly oNerous programmer blunders. Used to illustrate the exception-type web.xml element. * <P>