Servlet的監聽器Listener,它是實現了javax.servlet.ServletContextListener 接口的服務器端程序,它也是隨web應用的啟動而啟動,只初始化一次,隨web應用的停止而銷毀。主要作用是: 做一些初始化的內容添加工作、設置一些基本的內容、比如一些參數或者是一些固定的對象等等。下面利用監聽器對數據庫連接池DataSource的初始化演示它的使用:
MyServletContextListener.java package dc.gz.listeners; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.apache.commons.dbcp.BasicDataSource; /** * Web應用監聽器 */ public class MyServletContextListener implements ServletContextListener { // 應用監聽器的銷毀方法 public void contextDestroyed(ServletContextEvent event) { ServletContext sc = event.getServletContext(); // 在整個web應用銷毀之前調用,將所有應用空間所設置的內容清空 sc.removeAttribute("dataSource"); System.out.println("銷毀工作完成..."); } // 應用監聽器的初始化方法 public void contextInitialized(ServletContextEvent event) { // 通過這個事件可以獲取整個應用的空間 // 在整個web應用下面啟動的時候做一些初始化的內容添加工作 ServletContext sc = event.getServletContext(); // 設置一些基本的內容;比如一些參數或者是一些固定的對象 // 創建DataSource對象,連接池技術 dbcp BasicDataSource bds = new BasicDataSource(); bds.setDriverClassName("com.mysql.jdbc.Driver"); bds.setUrl("jdbc:mysql://localhost:3306/hibernate"); bds.setUsername("root"); bds.setPassword("root"); bds.setMaxActive(10);//最大連接數 bds.setMaxIdle(5);//最大管理數 //bds.setMaxWait(maxWait); 最大等待時間 // 把 DataSource 放入ServletContext空間中, // 供整個web應用的使用(獲取數據庫連接) sc.setAttribute("dataSource", bds); System.out.println("應用監聽器初始化工作完成..."); System.out.println("已經創建DataSource..."); } }
web.xml中配置如下,很簡單:
<!-- 配置應用監聽器 --> <listener> <listener-class>dc.gz.listeners.MyServletContextListener</listener-class> </listener>
這樣配置好了之后,以后在web應用中就可以通過ServletContext取得BasicDataSource對象,從而獲取與數據庫的連接,提高性能,方便使用。