標籤含義及與標籤的異同(轉)

web.xml裏面可以定義兩種參數:
(1)application範圍內的參數,存放在servletcontext中,在web.xml中配置如下:
<context-param>
           
<param-name>context/param</param-name>
           
<param-value>avalible during application</param-value>
  
</context-param>

(2)servlet範圍內的參數,只能在servlet的init()方法中取得,在web.xml中配置如下:

<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>

在servlet中可以通過代碼分別取用:

package com.wes.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

public class MainServlet extends HttpServlet {

    
public MainServlet() {
        
super();
     }

    
public void init() throws ServletException {
         System.out.println(
"下面的兩個參數param1是在servlet中存放的");
         System.out.println(
this.getInitParameter("param1"));
         System.out.println(
"下面的參數是存放在servletcontext中的");
         System.out.println(getServletContext().getInitParameter(
"context/param"));
      }

}

第一種參數在servlet裏面可以通過getServletContext().getInitParameter("context/param")得到
第二種參數只能在初始化該參數的servlet中通過this.getInitParameter("param1")取得

下面解釋一下context-param值的初始化原理:

 

1.啓動一個WEB項目的時候,容器(如:Tomcat)會去讀它的配置文件web.xml.讀兩個節點: <listener></listener> 和 <context-param></context-param>

 

2.緊接着,容器創建一個ServletContext(上下文),這個WEB項目所有部分都將共享這個上下文.

 

3.容器將<context-param></context-param>轉化爲鍵值對,並交給ServletContext.

 

4.容器創建<listener></listener>中的類實例,即創建監聽.

 

5.在監聽中會有contextInitialized(ServletContextEvent args)初始化方法,在這個方法中獲得
ServletContext = ServletContextEvent.getServletContext();
context-param的值 = ServletContext.getInitParameter("context-param的鍵");

 

6.得到這個context-param的值之後,你就可以做一些操作了.注意,這個時候你的WEB項目還沒有完全啓動完成.這個動作會比所有的Servlet都要早.
換句話說,這個時候,你對<context-param>中的鍵值做的操作,將在你的WEB項目完全啓動之前被執行.

 

7.舉例.你可能想在項目啓動之前就打開數據庫.
那麼這裏就可以在<context-param>中設置數據庫的連接方式,在監聽類中初始化數據庫的連接.

 

8.這個監聽是自己寫的一個類,除了初始化方法,它還有銷燬方法.用於關閉應用前釋放資源.比如說數據庫連接的關閉.

 

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