1. 程式人生 > 實用技巧 >web.xml分析

web.xml分析

一:web.xml載入過程:

  1.啟動WEB專案的時候,容器首先會去讀取web.xml配置檔案中的兩個節點:<listener> </listener>和<context-param> </context-param>

2.容器建立一個ServletContext(application),容器以<context-param></context-param>的name作為鍵,value作為值,將其轉化為鍵值對,存入ServletContext;這個web專案的所有部分都將共享這個上下文;

3.容器建立<listener></listener>中的類例項,根據配置的class類路徑<listener-class>來建立監聽,監聽中會有初始化方法,

系統呼叫Listener的該方法contextInitialized(ServletContextEvent args),在這個方法中獲得:

  ServletContextapplication =ServletContextEvent.getServletContext();

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

舉例:你可能想在專案啟動之前就開啟資料庫,那麼這裡就可以在<context-param>中設定資料庫的連線方式(驅動、url、user、password),在監聽類中初始化資料庫的連線。這個監聽是自己寫的一個類,除了初始化方法,它還有銷燬方法,用於關閉應用前釋放資源。比如:說資料庫連線的關閉,此時,呼叫contextDestroyed(ServletContextEvent args),關閉Web應用時,系統呼叫Listener的該方法。

4.讀取<filter></filter>,根據指定的類路徑來例項化過濾器;

5.如果系統中有Servlet,則Servlet是在第一次發起請求的時候被例項化的,而且一般不會被容器銷燬,它可以服務於多個使用者的請求;

二:web.xml標籤詳解:

  1.<context-param></context-param>

    元素含有一對引數名和引數值,用作應用的Servlet上下文初始化引數,引數名在整個Web應用中必須是惟一的,在web應用的整個生命週期中上下文初始化引數都存在,任意的Servlet和jsp都可以隨時隨地訪問它;<context-param>

可有可無,如果在web.xml中不寫<context-param>配置資訊,預設的路徑是/WEB-INF/applicationContext.xml,在WEB-INF目錄下建立的xml檔案的名稱必須是applicationContext.xml。如果是要自定義檔名可以在web.xml里加入contextConfigLocation這個context引數:在<param-value>裡指定相應的xml檔名,如果有多個xml檔案,可以寫在一起並以“,”號分隔;

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext.xml
</param-value>
</context-param>
classpath:表示告訴web容器去classpath(WEB-INF/classes和WEB-INF/lib)中去載入指定名稱的配置檔案,若是有同名檔案,則只會載入一個。
【classpath*:】此配置表示告訴web容器去classpath(WEB-INF/classes和WEB-INF/lib)中去載入指定名稱的配置檔案,若是有同名檔案則會全部載入

context-param引數的applicationContext.xm是為了載入web程式需要載入的資料庫等等配置

2.<servlet></servlet>

服務端的程式,用於處理及響應客戶的請求;

建立Servlet例項有兩個時機:

客戶端第一次請求某個Servlet時,系統建立該Servlet的例項,大部分Servlet都是這種Servlet;

web應用啟動時立即建立Servlet例項,即<load-on-start>1</laod-on-start>;

每個Servlet的執行都遵循如下生命週期:

(1)建立Servlet例項。

  (2)Web容器呼叫Servlet的init()方法,對Servlet進行初始化。

  (3)Servlet初始化之後,將一直存在與容器之中,用於響應客戶端請求,如果客戶端傳送GET請求,容器呼叫Servlet的doGet()方法處理並響應請求;如果客戶端傳送POST請求,容器呼叫Servlet的doPost()方法處理並響應請求。或者統一使用service()方法處理來響應使用者請求。

  (4)Web容器決定銷燬Servlet時,先呼叫Servlet的destory()方法,通常在關閉Web應用時銷燬Servlet例項。

配置Spring MVC,指定處理請求的Servlet,有兩種方式:

  (1)預設查詢MVC配置檔案的地址是:/WEB-INF/${servletName}-servlet.xml。

  (2)可以通過修改配置檔案的位置,需要在配置DispatcherServlet時指定MVC配置檔案的位置。

路徑經過編譯後生成的檔案都位於classes目錄下,即這兩個路徑相當於類路徑,在下面建立config資料夾(folder),建立自定義的xml配置檔案即可。

ContextLoaderListener初始化的上下文載入的Bean是對於整個應用程式共享的,一般如:DAO層、Service層Bean;DispatcherServlet初始化的上下文載入的Bean是隻對Spring MVC有效的Bean,如:Controller、HandlerMapping、HandlerAdapter等,該初始化上下文只加載Web相關元件。