ServletContext : 每一個web應用都有一個 ServletContext與之相關聯。 ServletContext對象在應用啓動的被創建,在應用關閉的時候被銷燬。 ServletContext在全局範圍內有效,類似於應用中的一個全局變量。
ServletContextListener: 使用listener接口,開發者能夠在爲客戶端請求提供服務之前向ServletContext中添加任意的對象。這個對象在ServletContext啓動的時候被初始化,然後在ServletContext整個運行期間都是可見的。該接口擁有兩個方法如下所示:
- void contextDestoryd(ServletContextEvent sce);
- void contextInitialized(ServletContextEvent sce);
用戶需要創建一個java類實現 javax.servlet.ServletContextListener接口並提供上面兩個方法的實現。
示例: 當你需要在處理任何客戶端請求之前創建一個數據庫連接,並且希望在整個應用過程中該連接都是可用的,這個時候ServletContextListener接口就會十分有用了。
- package com.database;
- import javax.servlet.ServletContext;
- import javax.servlet.ServletContextAttributeEvent;
- import javax.servlet.ServletContextAttributesListener;
- import javax.servlet.ServletContextEvent;
- import javax.servlet.ServletContextListener;
- import com.database.DbConnection;
- public class DatabaseContextListener implements ServletContextListener {
- private ServletContext context = null;
- private Connection conn = null;
- public DatabaseContextListener() {
- }
- //該方法在ServletContext啓動之後被調用,並準備好處理客戶端請求
- public void contextInitialized(ServletContextEvent event) {
- this.context = event.getServletContext();
- conn = DbConnection.getConnection;
- // 這裏DbConnection是一個定製好的類用以創建一個數據庫連接
- context = setAttribute(”dbConn”,conn);
- }
- //這個方法在ServletContext 將要關閉的時候調用
- public void contextDestroyed(ServletContextEvent event){
- this.context = null;
- this.conn = null;
- }
- }
然後部署該類,並在web.xml文件中添加
- <listener>
- com.database.DatabaseContextListener
- </listener>
一旦web應用啓動的時候,我們就能在任意的servlet或者jsp中通過下面的方式獲取數據庫連接:
- Connection conn = (Connection) getServletContext().getAttribute(”dbConn”);