java web.xml被檔案載入過程,各節點載入順序總結

來源:互聯網
上載者:User

web.xml載入過程(步驟):


1.啟動WEB項目的時候,容器(如:Tomcat)會去讀它的設定檔web.xml.讀兩個節點:   

<listener></listener> 和 <context-param></context-param>


  

2.緊接著,容器建立一個ServletContext(上下文),這個WEB項目所有部分都將共用這個上下文.

3.容器將<context-param></context-param>轉化為索引值對,並交給ServletContext.

4.容器建立<listener></listener>中的類執行個體,即建立監聽.

5.在監聽中會有contextInitialized(ServletContextEvent args)初始化方法,在這個方法中獲得:

 

 

ServletContext = ServletContextEvent.getServletContext();   
context-param的值 = ServletContext.getInitParameter("context-param的鍵");  

 

 

 6.得到這個context-param的值之後,你就可以做一些操作了.注意,這個時候你的WEB項目還沒有完全啟動完成.這個動作  會比所有的Servlet都要早.
換句話說,這個時候,你對<context-param>中的索引值做的操作,將在你的WEB項目完全啟動之前被執行.

7.舉例.你可能想在項目啟動之前就開啟資料庫.
那麼這裡就可以在<context-param>中設定資料庫的串連方式,在監聽類中初始化資料庫的串連.

8.這個監聽是自己寫的一個類,除了初始化方法,它還有銷毀方法.用於關閉應用前釋放資源.比如說資料庫連接的關閉.

 

web.xml節點載入順序:

 

可以肯定的是,節點的載入順序與它們在 web.xml 檔案中的先後順序無關。即不會因為 filter 寫在 listener 的前面而會先載入 filter。最終得出的結論是:listener -> filter -> servlet

        同時還存在著這樣一種配置節點:context-param,它用於向 ServletContext 提供索引值對,即應用程式上下文資訊。我們的 listener, filter 等在初始化時會用到這些上下文中的資訊,那麼 context-param 配置節是不是應該寫在 listener 配置節前呢?實際上 context-param 配置節可寫在任意位置,因此真正的載入順序為:

context-param -> listener -> filter -> servlet

        對於某類配置節而言,與它們出現的順序是有關的。以 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 類似,此處不再贅述。

【載入Spring】

       比如filter 需要用到 bean ,但載入順序是: 先載入filter 後載入spring,則filter中初始化操作中的bean為null;

       所以,如果過濾器中要使用到 bean,可以將spring 的載入 改成 Listener的方式 :

 

<listener>  
        <listener-class>  
            org.springframework.web.context.ContextLoaderListener   
        </listener-class>  
</listener>

 

 

   最終結論:

           web.xml 的載入順序是:[context-param -> listener -> filter -> servlet -> spring] ,而同類型節點之間的實際程式調用的時候的順序是根據對應的 mapping 的順序進行調用的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.