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>來建立監聽,監聽中會有初始化方法,
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>
<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相關元件。