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")取得.