web.xml文件中配置和的區別

web工程大多都需要配置web.xml文件,web.xml文件主要用來配置Listener、Filter、Servlet等。web.xml文件包括xml文件頭,DOCTYPE聲明,web-app元素。

web.xml的加載過程(引用)

在web-app元素內,元素的配置順序與工程的加載順序無關,web.xml的加載過程爲:

  1. 啓動一個web項目,web容器(如tomcat)讀取web.xml文件,讀取其中的配置信息
  2. 容器創建一個servlet上下文(servletContext),這個web項目所有部分共享這個上下文
  3. 容器將<context-param>轉換爲鍵值對,交給servletContext
  4. 容器創建<listener>中的監聽器實例
  5. 觸發contextInitialized方法,listener被調用(當Servlet 容器啓動或終止Web 應用時,會觸發ServletContextEvent 事件,該事件由ServletContextListener 來處理。在 ServletContextListener 接口中定義了處理ServletContextEvent 事件的兩個方法contextInitialized;contextDestroyed,web.xml有contextLoaderListener監聽器,spring等框架實現了本監聽器的接口方法)
  6. 調用完contextInitialized方法後,容器再對filter初始化
  7. 容器對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"));  
       }  
}  




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章