web.xml加載順序與過程


順序:

  總的來說,web.xml的加載順序是<context-param>-> <listener> -> <filter> -> <servlet>。其中,如果web.xml中出現了相同的元素,則按照在配置文件中出現的先后順序來加載。

過程:

  簡單說一下,web.xml的加載過程。當我們啟動一個WEB項目容器時,容器包括(JBoss,Tomcat等)。首先會去讀取web.xml配置文件里的配置,當這一步驟沒有出錯並且完成之后,項目才能正常的被啟動起來。

  啟動WEB項目的時候,容器首先會去讀取web.xml配置文件中的兩個節點:<context-param> </context-param><listener> </listener>

  緊接着,容器創建一個ServletContext(application),這個web項目的所有部分都將共享這個上下文。容器以<context-param></context-param>的name作為鍵,value作為值,將其轉化為鍵值對,存入ServletContext。

  容器創建<listener></listener>中的類實例,根據配置的class類路徑<listener-class>來創建監聽,在監聽中會有初始化方法,啟動Web應用時,系統調用Listener的該方法 contextInitialized(ServletContextEvent args),在這個方法中獲得:

  ServletContext application =ServletContextEvent.getServletContext();

  context-param的值application.getInitParameter("context-param的鍵");

  得到這個context-param的值之后,你就可以做一些操作了。

  舉例:你可能想在項目啟動之前就打開數據庫,那么這里就可以在<context-param>中設置數據庫的連接方式(驅動、url、user、password),在監聽類中初始化數據庫的連接。這個監聽是自己寫的一個類,除了初始化方法,它還有銷毀方法,用於關閉應用前釋放資源。比如:說數據庫連接的關閉,此時,調用contextDestroyed(ServletContextEvent args),關閉Web應用時,系統調用Listener的該方法。

  接着,容器會讀取<filter></filter>,根據指定的類路徑來實例化過濾器

  以上都是在WEB項目還沒有完全啟動起來的時候就已經完成了的工作。如果系統中有Servlet,則Servlet是在第一次發起請求的時候被實例化的,而且一般不會被容器銷毀,它可以服務於多個用戶的請求。所以,Servlet的初始化都要比上面提到的那幾個要遲。

所以,根據加載過程可以看出,web.xml的加載順序是<context-param>-> <listener> -> <filter> -> <servlet>。其中,如果web.xml中出現了相同的元素,則按照在配置文件中出現的先后順序來加載。

飲水思源:https://www.cnblogs.com/shoshana-kong/p/10682662.html


免責聲明!

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



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