1. 程式人生 > >Web.xml詳解分析

Web.xml詳解分析

print 應用程序 pretty 將在 加載 類型 指定 方法 ()

一、首先了解項目加載的優先級
首先可以肯定的是,加載順序與它們在 web.xml 文件中的先後順序無關。即不會因為 filter 寫在 listener 的前面而會先加載 filter。

最終得出的結論是:listener ->filter -> servlet

同時還存在著這樣一種配置節:context-param,它用於向 ServletContext 提供鍵值對,即應用程序上下文信息。我們的 listener, filter 等在初始化時會用到這些上下文中的信息,那麽 context-param 配置節是不是應該寫在 listener 配置節前呢?實際上context-param 配置節可寫在任意位置。

對於某類配置節而言,與它們出現的順序是有關的。以 filter 為例,web.xml 中當然可以定義多個 filter,與 filter 相關的一個配置節是 filter-mapping,這裏一定要註意,對於擁有相同 filter-name 的 filter 和 filter-mapping 配置節而言,filter-mapping必須出現在 filter 之後,否則當解析到 filter-mapping 時,它所對應的 filter-name 還未定義。web 容器啟動時初始化每個 filter 時,是按照 filter 配置節出現的順序來初始化的,當請求資源匹配多個 filter-mapping 時,filter 攔截資源是按照 filter-mapping配置節出現的順序來依次調用 doFilter() 方法的。

servlet 同 filter 類似,此處不再贅述。

由此,可以看出,web.xml 的加載順序是:context-param -> listener -> filter-> servlet ,而同個類型之間的實際程序調用的時候的順序是根據對應的 mapping 的順序進行調用的。

二、web項目啟動順序
1、啟動一個WEB項目的時候,WEB容器會去讀取它的配置文件web.xml,讀取和兩個結點。

2、緊急著,創建一個ServletContext(servlet上下文),這個web項目的所有部分都將共享這個上下文。

3、容器將轉換為鍵值對,並交給servletContext。

4、容器創建中的類實例,創建監聽器。

三、元素配置
1、< context-param> 配置上下文參數聲明應用範圍內的初始化參數。

  <context-param>  

    <param-name>ContextParameter</para-name>  

    <param-value>test</param-value>  

    <description>It is a test parameter.</description>  

  </context-param>   

2、< filter >/< filter > 過濾器元素將一個名字與一個實現javax.servlet.Filter接口的類相關聯。
< filter-mapping> < /filter-mapping> 一旦命名了一個過濾器,就要利用
filter-mapping元素把它與一個或多個servlet或JSP頁面相關聯。

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>
        org.springframework.web.filter.CharacterEncodingFilter
        </filter-class>
        <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>encodingFilter</filter-name>
        <url-pattern>*.jsp</url-pattern>
        <url-pattern>*.html</url-pattern>
        <url-pattern>*.xml</url-pattern>
        <url-pattern>*.json</url-pattern>
    </filter-mapping>

3、Servlet配置

< servlet>< /servlet> 用來聲明一個servlet的數據,主要有以下子元素:

 <servlet-name></servlet-name> 指定servlet的名稱  

 <servlet-class></servlet-class> 指定servlet的類名稱  

 <jsp-file></jsp-file> 指定web站臺中的某個JSP網頁的完整路徑  

 <init-param></init-param> 用來定義參數,可有多個init-param。在servlet 類中通過getInitParamenter(String name)方法訪問初始化參數  

 <load-on-startup></load-on-startup>指定當Web應用啟動時,裝載Servlet的次序。當值為正數或零時:Servlet容器先加載數值小的servlet,再依次加載其他數值大的servlet.當值為負或未定義:Servlet容器將在Web客戶首次訪問這個servlet時加載它.

< servlet-mapping>< /servlet-mapping> 用來定義servlet所對應的URL,包含兩個子元素:

   <servlet-name></servlet-name> 指定servlet的名稱  

   <url-pattern></url-pattern> 指定servlet所對應的URL   
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.html</url-pattern>
        <url-pattern>*.json</url-pattern>
        <url-pattern>*.xml</url-pattern>
    </servlet-mapping>

4、監聽器配置

  <listener>  

      <listerner-class>listener.SessionListener</listener-class>  

  </listener>   

Web.xml詳解分析