1: 監聽器的定義:java
監聽器其實是一個類,這個類實現了特定的接口,而後將這個類在 web.xml 文件中進行描述,這樣服務器在啓動的時候就能夠實例化這個類,啓動監聽器。當範圍對象的狀態發生變化的時候,服務器自動調用監聽器對象中的方法。例如統計用戶在線人數。web
web監聽器是Servlet規範中定義的一種特殊類,用於監聽ServletContext,HttpSession,ServletRequest等域對象的建立、銷燬、以及屬性的變化等,能夠在事件發生前、發生後進行一些處理。服務器
二、監聽器的用途session
三、實例函數
在web.xml文件中進行配置網站
listenr-class中是本身定義的Listener的類路徑spa
public class MyRequestListener implements ServletContextListener{ public void contextInitialized(ServletContextEvent event){ System.out.println("啓動監聽器"); } public void contextDestroy(ServletContextEvent event){ System.out.println("結束監聽器"); } }
編譯器會爲咱們自動生成contextInitialized和contextDestroy兩個函數3d
監聽器>過濾器>serlvet,在 web.xml 文件中配置的時候注意順序xml
4 監聽器的分類對象
按監聽的對象劃分,能夠分爲監聽
按監聽的事件劃分
因爲不少監聽的方式一致,所以咱們只考慮其中的HttpSession對象:
在web.xml中配置session超時
<session-config> <session-timeout> 30 </session-timeout> </session-config>
當超過30秒後,session會自動過時
public class MyRequestListener implements HttpSessionListener{ public void sessionCreate(HttpSessionEvent event){ System.out.println("event 建立:"); } public void sessionDestroy(HttpSessionEvent event){ System.out.println("event 銷燬:"); } }
另外,咱們能夠實現HttpSessionAttributeListener來實現session對象屬性的增長(added)、刪除(removed)、替換(replaced)的功能
public class MyRequestListener implements HttpSessionAttributeListener{ public void attributeAdded(HttpSessionBindEvent event){ } public void attributeRemoved(HttpSessionBindEvent event){ } public void attributeReplaced(HttpSessionBindEvent event){ } }
五、Servlte3.0下的使用
在Servlet3.0下經過註解@WebListener("")就能夠實現了,不須要在web.xml中進行配置
六、實戰
public class MyRequestListener implements HttpSessionListener{ private int counts = 0;//用於統計在線人數 public void sessionCreate(HttpSessionEvent event){ counts++; event.getSession().getServletContext.setAttribute("name",counts); //用戶人數+1 } public void sessionDestroy(HttpSessionEvent event){ counts--; event.getSession().getServletContext.setAttribute("name",counts);//用戶人數-1 } } @WebListener public class MyRequestListener2 implements ServletRequestListener{ private ArrayList<User>list; //建立一個在線用戶的列表 public void requestCreate(ServletRequestEvent event){ HttpServletRequest request = (HttpServletRequest) request.getServletContext(); String sessionId = request.getSession().getSessionId(); if(sessionId ...){ .... list.add(...); } } public void requestDestroy(ServletRequestEvent event){ } } public class User{ private int sessionId; }
注意,以上代碼只是大體的代碼,並不全面和正確。
參考:java Web開發技術應用 - 監聽器