web.xml監聽器 - listener


web.xml監聽器 - 函數回調

(面向事件編程概念)

<listener> 
    <listener-class>com.kiqi.listener.MyListener</listener-class>
  </listener>

一、監聽器類型 
1.Listener是Servlet的監聽器 
2.可以監聽客戶端的請求、服務端的操作等。 
3.通過監聽器,可以自動激發一些操作,如監聽在線用戶數量,當增加一個HttpSession時,給在線人數加1。 
4.編寫監聽器需要實現相應的接口 
5.編寫完成后在web.xml文件中配置一下,就可以起作用了 
6.可以在不修改現有系統基礎上,增加web應用程序生命周期事件的跟蹤

 

二、監聽器類型 
按監聽的對象(環境對象)划分:

1. 用於監聽應用程序環境對象(ServletContext的事件監聽器 - application

//ServletContextListener:用於對Servlet整個上下文進行監聽(創建、銷毀)。
public void contextInitialized(ServletContextEvent sce);//上下文初始化
public void contextDestroyed(ServletContextEvent sce);//上下文銷毀
public ServletContext getServletContext();//ServletContextEvent事件:取得一個ServletContext(application)對象

//ServletContextAttributeListener:對Servlet上下文屬性的監聽(增刪改屬性)。
public void attributeAdded(ServletContextAttributeEvent scab);//增加屬性
public void attributeRemoved(ServletContextAttributeEvent scab);//屬性刪除
public void attributeRepalced(ServletContextAttributeEvent scab);//屬性替換(第二次設置同一屬性)
//ServletContextAttributeEvent事件:能取得設置屬性的名稱與內容
public String getName();//得到屬性名稱
public Object getValue();//取得屬性的值

2. 用於監聽用戶會話對象(HttpSession Listener)的事件監聽器 - session

//HttpSessionListener接口:對Session的整體狀態的監聽。
public void sessionCreated(HttpSessionEvent se);//session創建
public void sessionDestroyed(HttpSessionEvent se);//session銷毀
//HttpSessionEvent事件:
public HttpSession getSession();//取得當前操作的session

//HttpSessionAttributeListener接口:對session的屬性監聽。
public void attributeAdded(HttpSessionBindingEvent se);//增加屬性
public void attributeRemoved(HttpSessionBindingEvent se);//刪除屬性
public void attributeReplaced(HttpSessionBindingEvent se);//替換屬性
//HttpSessionBindingEvent事件:
public String getName();//取得屬性的名稱
public Object getValue();//取得屬性的值
public HttpSession getSession();//取得當前的session
public void invalidate();//使session失效方法 - session.invalidate();

3. 用於監聽請求消息對象(ServletRequest Listener)的事件監聽器 - request

//ServletRequestListener:用於對Request請求進行監聽(創建、銷毀)
public void requestInitialized(ServletRequestEvent sre);//request初始化
public void requestDestroyed(ServletRequestEvent sre);//request銷毀
//ServletRequestEvent事件:
public ServletRequest getServletRequest();//取得一個ServletRequest對象
public ServletContext getServletContext();//取得一個ServletContext(application)對象

//ServletRequestAttributeListener:對Request屬性的監聽(增刪改屬性)。
public void attributeAdded(ServletRequestAttributeEvent srae);//增加屬性
public void attributeRemoved(ServletRequestAttributeEvent srae);//屬性刪除
public void attributeReplaced(ServletRequestAttributeEvent srae);//屬性替換(第二次設置同一屬性)

//ServletRequestAttributeEvent事件:能取得設置屬性的名稱與內容
public String getName();//得到屬性名稱
public Object getValue();//取得屬性的值

按監聽的事件類項划分

  1. 用於監聽域對象自身的創建和銷毀的事件監聽器

  2. 用於監聽域對象中的屬性的增加和刪除的事件監聽器

  3. 用於監聽綁定到HttpSession域中的某個對象的狀態的事件監聽器

 1 import javax.servlet.ServletContextEvent;    
 2 import javax.servlet.ServletContextListener;    
 3 
 4 public class MyListener implements ServletContextListener {    
 5     public void contextDestroyed(ServletContextEvent sce) {    
 6            System.out.println("die");    
 7     }    
 8 
 9     public void contextInitialized(ServletContextEvent sce) {    
10            System.out.println("init");     
11     }    
12 }
 1 public class HttpSessionListenerImpl implements HttpSessionListener {
 2     public void sessionCreated(HttpSessionEvent event) {
 3         ServletContext app = event.getSession().getServletContext();
 4         int count = Integer.parseInt(app.getAttribute("onLineCount").toString());
 5         count++;
 6         app.setAttribute("onLineCount", count);
 7         int maxOnLineCount = Integer.parseInt(app.getAttribute("maxOnLineCount").toString());
 8         if (count > maxOnLineCount) {
 9             //記錄最多人數是多少
10             app.setAttribute("maxOnLineCount", count);
11             DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
12             //記錄在那個時刻達到上限
13             app.setAttribute("date", df.format(new Date()));
14         }
15     }
16     //session注銷、超時時候調用,停止tomcat不會調用
17     public void sessionDestroyed(HttpSessionEvent event) {
18         ServletContext app = event.getSession().getServletContext();
19         int count = Integer.parseInt(app.getAttribute("onLineCount").toString());
20         count--;
21         app.setAttribute("onLineCount", count);    
22     }
23 }

參考:Listener 監聽器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM