web.xml,部署描述符文件(專業術語),是在Servlet規範中定義的,是web應用的配置文件(Servlet 3.0已開始放棄使用web.xml,轉而使用annotation註解來配置項目),它通常放置在web項目的WEB-INF目錄下。
web.xml基本配置(Servlet 2.4):
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Servlet2.4Test</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
注意點:
1. web.xml是一個標準的XML文件,所以它也必須遵循XML的語法規範,即大小寫敏感,而且在web.xml中所有元素標籤都是小寫的!
2. web.xml對元素的次序敏感
<web-app>
: 頂層(根)元素,用於描述項目使用的Servlet版本規範、XML版本、編碼等信息(特別注意:如果聲明的Servlet版本與項目使用的真實版本不一致的話,可能導致用Eclipse打開web.xml卡死的現象),各Servlet版本的聲明如下:
Servlet2.3:
<?xml version="1.0" encoding="UTF-8"?>
<!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 id="WebApp_ID">
<display-name>Servlet2.3Test</display-name>
</web-app>
Servlet2.5:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Servlet2.5Test</display-name>
</web-app>
Servlet3.0(該版本已開始推薦使用註解進行web項目配置,但還是可以使用web.xml進行配置):
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
</web-app>
<icon>
: 指出IDE和GUI工具用來表示Web應用的大圖標和小圖標,圖標必須爲GIF或JPEG格式,擴展名必須爲.gif或.jpg。
<small-icon>
: 小圖標,大小爲16 X 16 pixel<large-icon>
: 大圖標,爲32 X 32 pixel。
<icon>
<small-icon>/images/app_small.gif</small-icon>
<large-icon>/images/app_large.gif</large-icon>
</icon>
<display-name>
: 提供GUI工具可能會用來標記這個特定的Web應用的一個名稱。
<!-- 項目名稱 -->
<display-name>ServletTest</display-name>
<disciption>
: 對Web應用進行相關描述說明。
<disciption>doing some Servlet Test!</disciption>
<context-param>
: 用於聲明應用範圍內的初始化參數。在服務器啓動時,容器會將<context-param>
轉換爲鍵值對,並交給servletContext,所以可以通過ServletContext對象的getInitParamter()方法來獲取該參數值。
<param-name>
: 參數名,該值在整個Web應用中必須是惟一的。<param-value>
: 參數值<description >
: 參數描述
<context-param>
<!-- 參數名稱 -->
<param-name>test_param_name</param-name>
<!-- 參數值 -->
<param-value>This is param name test!</param-value>
</context-param>
JSP中取值方法:${initParam.test_param_name}
Servlet取值方法:String param_name=getServletContext().getInitParamter("test_param_name");
<filter>
: 用於設定web應用的過濾器,可以過濾url或servlet請求。
<filter-name>
: 過濾器名稱,與<filter-mapping>
的<filter-name>
相同,進行一 一映射,該值在整個Web應用中必須是惟一的。<filter-class>
:過濾類,在指定的請求被過濾器捕獲到後,進行相關操作的類,該類必須實現javaxs.servlet.Filter接口。<description>
:過濾器描述說明。<init-param>
: 自定義配置過濾器相關參數值,可以通過javax.servlet.FilterConfig的getInitParameter(“param-name”)獲取到。
<param-name>
: 參數名<param-value>
:參數值
-
<filter-mapping>
: 用於聲明過濾器要攔截的資源,必須與<filter>
配合使用。filter過濾器的調用順序是根據<filter-mapping>
在web.xml中的先後順序調用的。
<filter-name>
:過濾器名稱,與<filter-mapping>
的<filter-name>
相同,進行一 一映射。<servlet-name>
:被過濾的servlet名稱。<url-pattern>
:被過濾的url。<dispatcher>
: 指定過濾器所攔截的資源被 Servlet 容器調用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默認REQUEST。用戶可以設置多個<dispatcher>
子元素用來指定 Filter 對資源的多種調用方式進行攔截。
<dispatcher>
子元素可以設置的值及其意義:
REQUEST:當用戶直接訪問頁面時,Web容器將會調用過濾器。如果目標資源是通過RequestDispatcher的include()或forward()方法訪問時,那麼該過濾器就不會被調用。
INCLUDE:如果目標資源是通過RequestDispatcher的include()方法訪問時,那麼該過濾器將被調用。除此之外,該過濾器不會被調用。
FORWARD:如果目標資源是通過RequestDispatcher的forward()方法訪問時,那麼該過濾器將被調用,除此之外,該過濾器不會被調用。
ERROR:如果目標資源是通過聲明式異常處理機制調用時,那麼該過濾器將被調用。除此之外,過濾器不會被調用。
<listener>
: 用於定義註冊一個監聽器類,可以收到事件什麼時候發生以及用什麼作爲響應的通知。
<listener-class>
: 監聽器類,須包含完整路徑。
<servlet>
:聲明一個Servlet類
<servlet-name>
:servlet名稱<servlet-class>
:Servlet類,須包含完整路徑。<display-name>
:<description>
: Servlet相關描述說明。<load-on-startup>
:設置Servlet加載的次序。當這個數>=0時,Web容器啓動時會按數值從小到大依次加載進內存(實例化此servlet,並調用它的init方法)。如果數值<0或沒有指定,則由Web容器決定什麼時候加載servlet(Web容器通常會在客戶首次訪問這個Servlet時才加載)。配置該屬性值可以避免首次Servlet訪問時,加載Servlet導致的響應延遲。<jsp-file>
:<init-param>
: Servlet相關參數配置。
<param-name>
:參數名<param-value>
:參數值<description>
:相關描述說明
<run-as>
: 如果定義了run-as元素,它會重寫用於調用Web應用中servlet所設定的Enterprise JavaBean(EJB)的安全身份。
<description>
:相關描述說明<role-name>
:爲當前Web應用定義的一個安全角色的名稱。
<servlet-mapping>
: 將URL模式映射到某個servlet上。
<servlet-name>
:servlet名稱<url-pattern>
:
<session-config>
:指定javax.servlet.http.HttpSession對象的相關參數。
<session-timeout>
:指定默認的session超時時間,單位爲分鐘,該數值必須爲整數。如果<session-timeout>
元素的值爲零或負數,則表示會話將永遠不會超時。也可以用HttpSesion的setMaxInactiveInterval()方法設置sesion的時效。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<mime-mapping>
:將mime類型映射到擴展名
<extension>
:文件擴展名<mime-type>
:MIME類型
<mime-mapping>
<extension>doc</extension>
<mime-type>application/vnd.ms-word</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xls</extension>
<mime-type>application/vnd.ms-excel</mime-type>
</mime-mapping>
<mime-mapping>
<extension>ppt</extesnion>
<mime-type>application/vnd.ms-powerpoint</mime-type>
</mime-mapping>
<welcome-file-list>
:
<welcome-file>
:用於指定默認首頁文件的名稱
<error-page>
:
<error-code>
:HTTP錯誤代碼<exception-type>
:Java異常類型的完全限定的名稱,eg:java.lang.Exception | java.io.IOException | javax.servlet.ServletException …location >
:跳轉的路徑
<error-page>
<error-code>404</error-code>
<location>/error404.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/exception.jsp</location>
</error-page>
<jsp-config>
:用於JSP的相關配置,該標籤爲Servlet2.4版本新增屬性
<taglib>
:用於自定義標籤庫
<taglib-uri>
:TLD文件的URI<taglib-location>
:TLD文件在項目中的存放路徑
<jsp-property-group>
:Servlet2.4版本新增屬性
<description>
: 相關描述說明<display-name>
:<el-ignored>
:是否不支持EL語法,取值:true|false<page-encoding>
:設定JSP頁面的編碼<scripting-invalid>
:是否不支持<%scription%>語法,取值:true|false<is-xml>
:<icon>
:
<small-icon>
:<large-icon>
:
<url-pattern>
:設定值所影響的範圍,如:/CH2 或者/*.jsp<include-prelude>
:<include-coda>
:
<resource-env-ref>
:聲明與資源相關的一個管理對象
<description>
:相關描述說明<env-entry-name>
:<env-entry-type>
:<env-entry-value>
:
<resource-ref>
:
<description>
:相關描述說明<res-ref-name>
:與java:comp/env上下文相對應的JNDI名稱,在整個Web應用中必須是惟一的。<res-type>
:指明資源類型<res-auth>
:指定管理所引用資源的Manager,取值:Application | Container。Container表示由容器來創建和管理Resource,Application表示由web應用來創建和管理Resource。<res-sharing-scope>
:是否可以共享通過給定資源管理器連接工廠引用獲得的連接。取值:Shareable(默認值) | Unshareable。
<resource-env-ref>
<resource-env-ref-name>jdbc/testDataSource</resource-env-ref-name>
<resource-env-ref-type>javax.sql.DataSource</resource-env-ref-type>
<res-auth>Container</res-auth>
</resource-env-ref>
java中獲取該JNDI方法:
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jndi/testDataSource");
Connection conn = ds.getConnection();
<security-constraint>
:
<login-config>
:設定該web站點四種認證類型
<auth-method>
:指定驗證方法。取值:BASIC | DIGEST | FORM | CLIENT-CERT。
BASIC:HTTP規範,Base64
DIGEST:HTTP規範,數據完整性強一些,但不是SSL
CLIENT-CERT:J2EE規範,數據完整性很強,公共鑰匙(PKC)
FORM:J2EE規範,數據完整性非常弱,沒有加密,允許有定製的登陸界面。<realm-name>
:指定BASIC驗證中使用的領域名。<auth-method>
屬性配置爲BASIC時纔有效。<form-login-config>
:指定FORM驗證中,相關登陸頁面和出錯頁面。<auth-method>
屬性配置爲FORM時纔有效。
<form-login-page>
:定義登陸頁面的路徑<form-error-page>
:定義出錯頁面的路徑
<security-role>
:
<env-entry>
:’
<ejb-ref>
:
<ejb-local-ref>
:
未完待續!