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規范,它忽略了服務器生成的錯誤消息,而是顯示自己的標準出錯信息??赊D到其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 > random 404 error message</A>. From the amazing and amusing plinko.net <A > 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>