天天看點

java 監聽器 分類_Java 監聽器

1: 監聽器的定義

2:監聽器的用途

3:執行個體

4:監聽器分類

5:Servlet3.0下監聽器的使用

6:實際項目常用的案例

1: 監聽器的定義:

監聽器實際上是一個類,這個類實作了特定的接口,然後将這個類在 web.xml 檔案中進行描述,這樣伺服器在啟動的時候就可以執行個體化這個類,啟動監聽器。當範圍對象的狀态發生變化的時候,伺服器自動調用監聽器對象中的方法。例如統計使用者線上人數。

java 監聽器 分類_Java 監聽器
java 監聽器 分類_Java 監聽器

web監聽器是Servlet規範中定義的一種特殊類,用于監聽ServletContext,HttpSession,ServletRequest等域對象的建立、銷毀、以及屬性的變化等,可以在事件發生前、發生後進行一些處理。

2、監聽器的用途

1、統計線上人數和線上使用者

2、系統加載時進行資訊的初始化工作

3、統計網站的通路量

4、跟Spring結合

3、執行個體

在web.xml檔案中進行配置

java 監聽器 分類_Java 監聽器

listenr-class中是自己定義的Listener的類路徑

public class MyRequestListener implements ServletContextListener{

public void contextInitialized(ServletContextEvent event){

System.out.println("啟動監聽器");

}

public void contextDestroy(ServletContextEvent event){

System.out.println("結束監聽器");

}

}

編譯器會為我們自動生成contextInitialized和contextDestroy兩個函數

監聽器>過濾器>serlvet,在 web.xml 檔案中配置的時候注意順序

4 監聽器的分類

按監聽的對象劃分,可以分為監聽

ServletContext對象

HttpSession對象

ServletRequest對象

按監聽的事件劃分

域對象自身的建立和銷毀

域對象中屬性的建立和消除

綁定到session中的某個對象的狀态

由于很多監聽的方式一緻,是以我們隻考慮其中的HttpSession對象:

在web.xml中配置session逾時

30

當超過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){

}

}

5、Servlte3.0下的使用

在Servlet3.0下通過注解@WebListener("")就可以實作了,不需要在web.xml中進行配置

6、實戰

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 ArrayListlist; //建立一個線上使用者的清單

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開發技術應用 - 監聽器