web.xml檔案中配置和的區別
阿新 • • 發佈:2019-01-03
web工程大多都需要配置web.xml檔案,web.xml檔案主要用來配置Listener、Filter、Servlet等。web.xml檔案包括xml檔案頭,DOCTYPE宣告,web-app元素。
web.xml的載入過程(引用)
在web-app元素內,元素的配置順序與工程的載入順序無關,web.xml的載入過程為:
- 啟動一個web專案,web容器(如tomcat)讀取web.xml檔案,讀取其中的配置資訊
- 容器建立一個servlet上下文(servletContext),這個web專案所有部分共享這個上下文
- 容器將<context-param>轉換為鍵值對,交給servletContext
- 容器建立<listener>中的監聽器例項
- 觸發contextInitialized方法,listener被呼叫(當Servlet 容器啟動或終止Web 應用時,會觸發ServletContextEvent 事件,該事件由ServletContextListener 來處理。在 ServletContextListener 介面中定義了處理ServletContextEvent 事件的兩個方法contextInitialized;contextDestroyed,web.xml有contextLoaderListener監聽器,spring等框架實現了本監聽器的介面方法)
- 呼叫完contextInitialized方法後,容器再對filter初始化
- 容器對web.xml中的指定load-on-startup的值為正數Servlet初始化(優先順序1,2,3...->遞減),負數或不指定則在該Servlet呼叫時初始化(springMVC的初始化為此階段
結論:web.xml 的載入順序:
ServletContext -> context-param(無順序)-> listener(無順序)-> filter(書寫順序) -> servlet(load-on-startup優先順序)
web.xml檔案中配置<context-param>和<init-param>的區別
<context-param>和<init-param>都是上下文引數,但它們的範圍和使用方式不同。
<context-param>是application範圍內的初始化引數,用於向servlet-context提供鍵值對,即應用程式的上下文資訊,listener、filter等初始化時會用到這些資訊
<init-param>是servlet範圍內的引數,只能在servlet類的init()方法中取得
具體使用方法如下:
<context-param>
<param-name>context/param</param-name>
<param-value>avalible during application</param-value>
</context-param>
<servlet> <servlet-name>MainServlet</servlet-name> <servlet-class>com.wes.controller.MainServlet</servlet-class> <init-param> <param-name>param1</param-name> <param-value>avalible in servlet init()</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet>
public class MainServlet extends HttpServlet { public MainServlet() { super(); } public void init() throws ServletException { System.out.println(this.getInitParameter("param1")); System.out.println(getServletContext().getInitParameter("context/param")); } }