Listener(監聽器)
1、Listener(監聽器)基本介紹
Filter、Listener和 servlet 是 Java EE 的三大組件。
Listener 監聽器其實就是一個實現特定接口的普通java程序,這個程序專門用于監聽另一個java對象的方法調用或屬性改變,當被監聽對象發生上述事件后,監聽器某個方法立即被執行。
有好幾種監聽器,其中最常用的是ServletContextListener。除了ServletContextListener外,還有幾種Listener:
- HttpSessionListener:監聽HttpSession的創建和銷毀事件;
- ServletRequestListener:監聽ServletRequest請求的創建和銷毀事件;
- ServletRequestAttributeListener:監聽ServletRequest請求的屬性變化事件(即調用
ServletRequest.setAttribute()方法); - ServletContextAttributeListener:監聽ServletContext的屬性變化事件(即調用
ServletContext.setAttribute()方法);
2、使用ServletContextListener監聽器
定義一個ServletContextListener監聽器:
@WebListener public class AppListener implements ServletContextListener { // ServletContext對象創建后會調用該方法。一般可在此初始化WebApp,例如打開數據庫連接池等: public void contextInitialized(ServletContextEvent sce) { System.out.println("ServletContext被創建了。。"); } // ServletContext對象銷毀之前會調用該方法。一般可在此清理WebApp,例如關閉數據庫連接池等: public void contextDestroyed(ServletContextEvent sce) { System.out.println("ServletContext被銷毀了。。"); } }
上面我們使用了注解 @WebListener 來配置監聽器。任何標注為@WebListener,且實現了特定接口的類會被Web服務器自動初始化。
contextInitialized() 方法會在整個Web應用程序初始化完成后執行,contextDestroyed() 方法會在Web應用程序關閉后執行。在啟動服務器時,我們可以看到 contextInitialized() 方法會被執行。當正常關閉服務器時,contextDestroyed() 方法會被執行。
2.1、使用 web.xml 配置監聽器
除了使用注解配置,我們還可以在 web.xml 里面使用 listener 節點配置監聽器。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <listener> <listener-class>test.Listener01</listener-class> </listener> </web-app>
上面的 listener-class 里面的是監聽器的完整類名。

浙公網安備 33010602011771號