1. 程式人生 > >context-param和init-param區別

context-param和init-param區別

context-param

context-param是應用範圍內的引數,存放在ServletContext中

web.xml中的配置

 <context-param>
           <param-name>context/param</param-name>
           <param-value>avalible during application</param-value>
  </context-param>

  引數獲取:通過ServletContext物件

Stringvalue=(String)servletContext.getAttribute("name");

 注:當伺服器啟動時,伺服器會為每一個WEB應用建立一個唯一的ServletContext物件代表WEB應用。

每一個web應用中的servlet共享一個ServletContext,所以Servlet之間就可以通過該物件來實現資料通訊。

         ContextServlet的生命週期:Servlet的生命週期是最長的,當伺服器啟動時被建立,伺服器關閉或web應用被移出伺服器時被銷燬。

        

(1)呼叫ServletConfig類的getServletContext()方法 在init(ServletConfigconfig)方法中,使用ServletContextcontext=config.getServletContext();

(2)呼叫GenericServlet類的getServletContext()方法 其實這種方式也是呼叫ServletConfig類的getServletContext()方法,因為GenericServlet類實現了ServletConfig介面;

(3)呼叫HttpSession類的getServletContext()方法: HttpSession也是一個介面,我們會在後面講這個介面,它有一個方法可以獲取到ServletContext物件;

(4)呼叫ServletContextEvent類的getServletContext()方法 ServletContextEvent類只有一個方法,就是getServletContext(),這個類我們後面也會講到。

        配置作用:

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();

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

7.舉例.你可能想在專案啟動之前就開啟資料庫. 那麼這裡就可以在<context-param>中設定資料庫的連線方式,在監聽類中初始化資料庫的連線.

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

init-param

init-param是Servlet範圍內的引數,只能在Sercvlet的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的init()方法中通過this.getInitParameter("param1")取得.