web.xml解析


常用元素及含義


<!-- standalone 定義了外部定義的 DTD 文件的存在性,有效值是 yes和 no -->
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- web-app是部署描述符的根元素,其它元素都要寫在<web-app></web-app>之間 -->
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    version="2.4"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

    <!-- 在開發中以上部分基本都是一樣的,不需要我們過多的關注 -->

    <!-- 定義了web應用的名稱 -->
    <display-name>test-web</display-name>
    <!-- 聲明web應用的描述信息 -->
    <description>test-web application</description>
    
    <!-- 過濾器,一個filter對應一個filter-mapping,二者的順序不能顛倒,並且filter-name一致 -->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <!-- 只針對這個filter的參數 -->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- web應用整個生命周期都存在的參數名和值,類似於全局變量,參數名唯一 -->
    <context-param>
        <param-name>defaultHtmlEscape</param-name>
        <param-value>true</param-value>
    </context-param>

    <!-- 監聽器,指出事件監聽程序類 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- servlet配置,下面有詳細解釋 -->
    <servlet>
        <servlet-name>test-web</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>test-web</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
    <!-- 會話超時配置(單位為分鍾),超時后服務器將次session銷毀 -->
    <session-config>
        <session-timeout>10</session-timeout>
    </session-config>
    
     <!--在返回特定HTTP狀態代碼時,或者特定類型的異常被拋出時,能夠制定將要顯示的頁面-->
    <error-page>
        <!-- 通過異常類型顯示對應內容,location可以配置路由或者頁面-->
        <exception-type>java.lang.Exception</exception-type>
        <location>/exceptionServlet</location>
    </error-page>

    <error-page>
        <!-- 通過出錯碼顯示對應內容 -->
        <error-code>404</error-code>
        <location>/notFound.jsp</location>
    </error-page>
</web-app>

 

servlet配置詳解


    <servlet>
        <servlet-name>servlet名稱</servlet-name>
        <servlet-class>servlet類全路徑(包名.類名)</servlet-class>
        <init-param>
            <param-name>參數</param-name>
            <param-value>參數值</param-value>
        </init-param>
        <load-on-startup>加載優先級</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet名稱</servlet-name>
        <url-pattern>訪問路徑</url-pattern>
    </servlet-mapping>

其中,<load-on-startup>必須是整數;如果是小於0或者不存在,這個servlet只有被選擇的時候才會被加載;如果大於等於0,容器在啟動web應用時就被加載;數值越小servlet的越先被加載;值相同時,容器自行選擇順序加載。  

 

<context-param>和<init-param>區別


<context-param>配置在web.xml的<web-app>標簽中,類似於全局變量,servlet隨時都能訪問它,存放在servletContext對象中(即application對象); 通過getServletContext().getInitParameter("contextParam")的方式獲取。

<init-param>是針對於filter/servlet等而言的參數,用來初始化當前的Servlet的,屬於當前Servlet的配置,因此存放在servletConfig對象中; 通過getServletConfig().getInitParameter("initParam")的方式獲取。

 

元素加載過程


當我們去啟動一個WEB項目時,容器包括(JBoss、Tomcat等)首先會讀取項目web.xml配置文件里的配置,當這一步驟沒有出錯並且完成之后,項目才能正常地被啟動起來。
啟動WEB項目的時候,容器首先會去它的配置文件web.xml讀取兩個節點: <listener></listener>和<context-param></context-param>,
緊接着,容器創建一個ServletContext(application),這個WEB項目所有部分都將共享這個上下文。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM