1. 程式人生 > >web.xml加載過程

web.xml加載過程

完全 servlet nbsp lis args 鍵值 use 我們 cati

1、容器讀取web.xml配置文件的兩個節點: <listener></listener>和<context-param></context-param>

2、容器創建ServletContext(即application),這個上下文將被Web項目的所有部分共享

3、<context-param></context-param>的name作為鍵,value作為值,鍵值對存入ServletContext

4、容器創建<listener></listener>的類實例,再根據listener-class創建監聽器,

監聽器的初始化方法為:contextInitialized(ServletContextEvent args),ServletContextEvent,顧名思義可知監聽上下文事件,

在啟動應用時,系統會調用此方法,此方法中有:ServletContextapplication=ServletContextEvent.getServletContext();獲取上下文,

這樣,我們可以通過:application.getInitParameter("context-param的鍵");來獲取鍵值,並完成一些操作

舉例如下:

如果想在項目啟動之前就打開數據庫,可先在<context-param>中設置數據庫的連接方式(驅動、url、user、password)等,再創建類實例,創建監聽器,在監聽器中獲取這些參數並初始化數據庫的連接。

這個監聽類,除了初始化方法,它還有銷毀方法,可用於關閉應用前釋放資源。比如:說數據庫連接的關閉,此時,調用contextDestroyed(ServletContextEvent args),關閉Web應用時,系統會調用Listener的該方法。

5、容器讀取<filter></filter>,根據指定的類路徑來實例化過濾器(類似於listener)。

以上為容器還沒有完全啟動時就完成的工作

6、Servlet在第一次發起請求時被實例化。

總的來說,web.xml的加載順序是:<context-param>-><listener>->

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

web.xml加載過程