web.xml整理

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>

未完待續!

原文地址:http://blog.csdn.net/chen_zw/article/details/47706069

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章