Javaweb之監聽器的使用
阿新 • • 發佈:2020-08-09
概念:
監聽器,簡單理解就是監聽觀察某個事件的發生情況,當被監聽的事件發生,事件發生者(事件源) 就會給註冊該事件的監聽者(監聽器)傳送訊息,將某些資訊傳遞給監聽者,同時監聽者也可以獲得一份事件物件,根據這個物件可以獲得相關屬性和執行相關操作。
監聽器模型涉及以下三個物件,模型圖如下:
(1)事件:使用者對元件的一個操作,或者說程式執行某個方法,稱之為一個事件。
(2)事件源:發生事件的元件就是事件源,也就是被監聽的物件。
(3)事件監聽器(處理器):監聽並負責處理事件的方法。
監聽器的實現:
實現顯示網站人數的監聽器主要有三個步驟:
-
編寫一個監聽類,實現的是HttpSessionListener介面;
-
在index.jsp中獲取並顯示資料;
-
在web.xml中註冊監聽器。
步驟一:編寫一個監聽類OnlineCountListener
package listener; import javax.servlet.ServletContext; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; //統計網站線上人數,就是統計sessionpublic class OnlineCountListener implements HttpSessionListener { //建立session監聽,一旦建立就會觸發一次這個事件 public void sessionCreated(HttpSessionEvent httpSessionEvent) { ServletContext context = httpSessionEvent.getSession().getServletContext(); System.out.println(httpSessionEvent.getSession().getId()); Integer OnlineCount= (Integer) context.getAttribute("OnlineCount"); if (OnlineCount==null){ OnlineCount = new Integer(1); }else { int count = OnlineCount.intValue(); OnlineCount = new Integer(count+1); } context.setAttribute("OnlineCount",OnlineCount); } //銷燬session監聽 public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { ServletContext context = httpSessionEvent.getSession().getServletContext(); Integer OnlineCount = (Integer) context.getAttribute("OnlineCount"); if (OnlineCount==null){ OnlineCount = new Integer(0); }else { int count = OnlineCount.intValue(); OnlineCount = new Integer(count-1); } context.setAttribute("OnlineCount",OnlineCount); } /* * session的銷燬: * 手動銷燬:getSession().invalidate(); * 自動銷燬:設定過期*/ }
在index.jsp中獲取並顯示資料:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<h1>當前有:<span><%=this.getServletConfig().getServletContext().getAttribute("OnlineCount")%></span>人線上</h1>
</body>
</html>
在web.xml中註冊監聽器:
<!--註冊監聽器--> <listener> <listener-class>listener.OnlineCountListener</listener-class> </listener>