一、web.xml學名叫部署描述符文件,是在Servlet規範中定義的,是web應用的配置文件。html
二、部署描述符文件就像全部XML文件同樣,必須以一個XML頭開始。這個頭聲明可使用的XML版本並給出文件的字符編碼。DOCYTPE聲明必須當即出如今此頭以後。這個聲明告訴服務器適用的servlet規範的版本並指定管理此文件其他部份內容的語法的DTD(Document Type Definition,文檔類型定義)。全部部署描述符文件的頂層(根)元素爲web-app。請注意,XML元素不像HTML,他們是大小寫敏感的。所以,web-App和WEB-APP都是不合法的,web-app必須用小寫。java
[html] view plain copyweb
1. <?xml version="1.0" encoding="UTF-8"?> 安全
2. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> 服務器
3. <web-app> session
4. </web-app> app
三、web.xml中XML 元素不只是大小寫敏感的,並且它們還對出如今其餘元素中的次序敏感。例如,XML頭必須是文件中的第一項,DOCTYPE聲明必須是第二項,而web- app元素必須是第三項。在web-app元素內,元素的次序也很重要。服務器不必定強制要求這種次序,但它們容許(實際上有些服務器就是這樣作的)徹底拒絕執行含有次序不正確的元素的Web應用。這表示使用非標準元素次序的web.xml文件是不可移植的。webapp
icon icon元素指出IDE和GUI工具用來表示Web應用的一個和兩個圖像文件的位置。
display-name display-name元素提供GUI工具可能會用來標記這個特定的Web應用的一個名稱。
description description元素給出與此有關的說明性文本。
context-param context-param元素聲明應用範圍內的初始化參數。
filter 過濾器元素將一個名字與一個實現javax.servlet.Filter接口的類相關聯。
filter-mapping 一旦命名了一個過濾器,就要利用filter-mapping元素把它與一個或多個servlet或JSP頁面相關聯。
listener servlet API的版本2.3增長了對事件監聽程序的支持,事件監聽程序在創建、修改和刪除會話或servlet環境時獲得通知。Listener元素指出事件監聽程序類。
servlet在向servlet或JSP頁面制定初始化參數或定製URL時,必須首先命名servlet或JSP頁面。Servlet元素就是用來完成此項任務的。
servlet-mapping 服務器通常爲servlet提供一個缺省的URL:http://host/webAppPrefix/servlet/ServletName。可是,經常會更改這個URL,以便servlet能夠訪問初始化參數或更容易地處理相對URL。在更改缺省URL時,使用servlet-mapping元素。
session-config 若是某個會話在必定時間內未被訪問,服務器能夠拋棄它以節省內存。可經過使用HttpSession的setMaxInactiveInterval方法明確設置單個會話對象的超時值,或者可利用session-config元素制定缺省超時值。
mime-mapping 若是Web應用具備想到特殊的文件,但願能保證給他們分配特定的MIME類型,則mime-mapping元素提供這種保證。
welcom-file-list welcome-file-list元素指示服務器在收到引用一個目錄名而不是文件名的URL時,使用哪一個文件。
error-page error-page元素使得在返回特定HTTP狀態代碼時,或者特定類型的異常被拋出時,可以制定將要顯示的頁面。
taglib taglib元素對標記庫描述符文件(Tag Libraryu Descriptor file)指定別名。此功能使你可以更改TLD文件的位置,而不用編輯使用這些文件的JSP頁面。
resource-env-ref resource-env-ref元素聲明與資源相關的一個管理對象。
resource-ref resource-ref元素聲明一個資源工廠使用的外部資源。
security-constraint security-constraint元素制定應該保護的URL。它與login-config元素聯合使用
login-config 用login-config元素來指定服務器應該怎樣給試圖訪問受保護頁面的用戶受權。它與sercurity-constraint元素聯合使用。
security-role security-role元素給出安全角色的一個列表,這些角色將出如今servlet元素內的security-role-ref元素的role-name子元素中。分別地聲明角色可以使高級IDE處理安全信息更爲容易。
env-entry env-entry元素聲明Web應用的環境項。
ejb-ref ejb-ref元素聲明一個EJB的主目錄的引用。
ejb-local-ref ejb-local-ref元素聲明一個EJB的本地主目錄的應用。jsp
元素<icon>工具
含義
icon元素包含small-icon和large-icon兩個子元素.用來指定web站臺中小圖標和大圖標的路徑.
<small-icon>/路徑/smallicon.gif</small-icon>
small-icon元素應指向web站臺中某個小圖標的路徑,大小爲16 X 16 pixel,可是圖象文件必須爲GIF或JPEG格式,擴展名必須爲:.gif或.jpg.
<large-icon>/路徑/largeicon-jpg</large-icon>
large-icon元素應指向web站臺中某個大圖表路徑,大小爲32 X 32 pixel,可是圖象文件必須爲GIF或JPEG的格式,擴展名必須爲; gif或jpg.
範例
<icon>
<small-icon>/images/small.gif</small-icon>
<large-icon>/images/large.gif</large-icon>
</icon>
元素<display-name>,<description>
含義
<display-name>應用名稱</display-name>
定義應用的名稱。
<description>應用描述</discription>
對應用作出描述。
範例
<display-name>test</display-name>
<description>測試應用V1.0</discription>
元素<context-param>
含義
context-param 元素用來設定web應用的環境參數(context),它包含兩個子元素:
param-name和param-value.
<param-name>參數名稱</param-name>
設定Context名稱
<param-value>值</param-value>
設定Context名稱的值
filter元素
filter元素用於指定Web容器中的過濾器。在請求和響應對象被servlet處理以前或以後,可使用過濾器對這兩個對象進行操做。利用下一節介紹的filter-mapping元素,過濾器被映射到一個servlet或一個URL模式。這個過濾器的filter元素和filter-mapping元素必須具備相同的名稱。
<!ELEMENT filter (icon?, filter-name, display-name?, description?,
filter-class, init-param*)>
<!ELEMENT filter-name (#PCDATA)>
<!ELEMENT filter-class (#PCDATA)>
icon、display-name和description元素的用法和上一節介紹的用法相同。init-param元素與context-param元素具備相同的元素描述符。filter-name元素用來定義過濾器的名稱,該名稱在整個應用中都必須是唯一的。filter-class元素指定過濾器類的徹底限定的名稱。
下面是一個使用filter元素的部署描述符的例子:
<?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>
<filter>
<filter-name>Encryption Filter</filter-name>
<filter-class>com.branysoftware.EncryptionFilter</filter-class>
</filter>
</web-app>
filter-mapping元素
filter-mapping元素用來聲明Web應用中的過濾器映射。過濾器可被映射到一個servlet或一個URL模式。將過濾器映射到一個servlet中會形成過濾器做用於servlet上。將過濾器映射到一個URL模式中則能夠將過濾器應用於任何資源,只要該資源的URL與URL模式匹配。過濾是按照部署描述符的filter-mapping元素出現的順序執行的。
<!ELEMENT filter-mapping (filter-name, (url-pattern | servlet-name))>
<!ELEMENT filter-name (#PCDATA)>
<!ELEMENT url-pattern (#PCDATA)>
<!ELEMENT servlet-name (#PCDATA)>
filter-name值必須對應filter元素中聲明的其中一個過濾器名稱。下面是一個含有filter-mapping元素的部署描述符:
<?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>
<filter>
<filter-name>Encryption Filter</filter-name>
<filter-class>com.brainysoftware.EncryptionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Encryption Filter</filter-name>
<servlet-name>EncryptionFilteredServlet</servlet-name>
</filter-mapping>
</web-app>
listener元素
listener元素用來註冊一個監聽器類,能夠在Web應用中包含該類。使用listener元素,能夠收到事件何時發生以及用什麼做爲響應的通知。
<!ELEMENT listener (listener-class)>
<!ELEMENT listener-class (#PCDATA)>
下面是一個含有listener元素的有效部署描述符:
<?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>
<listener>
<listener-class>MyAppListener</listener-class>
</listener>
</web-app>
servlet元素
servlet元素用來聲明一個servlet。
<!ELEMENT servlet (icon?, servlet-name, display-name?, description?,
(servlet-class|jsp-file), init-param*, load-on-startup?, run-as?,
security-role-ref*)>
<!ELEMENT servlet-name (#PCDATA)>
<!ELEMENT servlet-class (#PCDATA)>
<!ELEMENT jsp-file (#PCDATA)>
<!ELEMENT init-param (param-name, param-value, description?)>
<!ELEMENT load-on-startup (#PCDATA)>
<!ELEMENT run-as (description?, role-name)>
<!ELEMENT role-name (#PCDATA)>
icon、display-name和description元素的用法和上一節介紹的用法相同。init-param元素與context-param元素具備相同的元素描述符。可使用init-param子元素將初始化參數名和參數值傳遞給servlet。
(1) servlet-name、servlet-class和jsp-file元素
servlet元素必須含有servlet-name元素和servlet-class元素,或者servlet-name元素和jsp-file元素。描述以下:
● servlet-name元素用來定義servlet的名稱,該名稱在整個應用中必須是唯一的。
● servlet-class元素用來指定servlet的徹底限定的名稱。
● jsp-file元素用來指定應用中JSP文件的完整路徑。這個完整路徑必須由a/開始。
(2) load-on-startup元素
當啓動Web容器時,用load-on-startup元素自動將servlet加入內存。加載servlet就意味着實例化這個servlet,並調用它的init方法。可使用這個元素來避免第一個servlet請求的響應由於servlet載入內存所致使的任何延遲。若是load-on-startup元素存在,並且也指定了jsp-file元素,則JSP文件會被從新編譯成servlet,同時產生的servlet也被載入內存。
load-on-startup元素的內容能夠爲空,或者是一個整數。這個值表示由Web容器載入內存的順序。舉個例子,若是有兩個servlet元素都含有load-on-startup子元素,則load-on-startup子元素值較小的servlet將先被加載。若是load-on-startup子元素值爲空或負值,則由Web容器決定何時加載servlet。若是兩個servlet的load-on-startup子元素值相同,則由Web容器決定先加載哪個servlet。
(3) run-as元素
若是定義了run-as元素,它會重寫用於調用Web應用中servlet所設定的Enterprise JavaBean(EJB)的安全身份。Role-name是爲當前Web應用定義的一個安全角色的名稱。
(4) security-role-ref元素
security-role-ref元素定義一個映射,該映射在servlet中用isUserInRole (String name)調用的角色名與爲Web應用定義的安全角色名之間進行。security-role-ref元素的描述以下:
<!ELEMENT security-role-ref (description?, role-name, role-link)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT role-name (#PCDATA)>
<!ELEMENT role-link (#PCDATA)>
role-link元素用來將安全角色引用連接到已定義的安全角色。role-link元素必須含有已經在security-role元素中定義的一個安全角色的名稱。
(5) Faces Servlet的servlet元素
在 JSF應用中,須要爲Faces Servlet定義一個servlet元素,以下所示:
<?xml version=」1.0」?>
<!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>
<!– Faces Servlet –>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup> 1 </load-on-startup>
</servlet>
<!– Faces Servlet Mapping –>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
</web-app>
seervlet-mapping 元素
seervlet-mapping 元素將URL模式映射到某個servlet。
<!ELEMENT servlet-mapping (servlet-name, url-pattern)>
<!ELEMENT servlet-name (#PCDATA)>
<!ELEMENT url-pattern (#PCDATA)>