監聽器小例子之統計線上人數
阿新 • • 發佈:2019-01-06
監聽器小例子
統計同時線上人數:
每當有一個使用者登入的時候在伺服器端建立一個session物件,寫一個監聽器,監聽session的建立與銷燬,每當建立一個session物件的時候就把計數器+1,然後儲存到servletContext物件上,每當有一個使用者下線的時候就銷燬對應的session物件,把計數器-1,儲存到servletContext上。
CountListener.java程式碼:
package web; import javax.servlet.ServletContext; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class CountListener implements HttpSessionListener{ private int count = 0; //計數器 /** * session物件建立之後,容器會產生HttpSessionEvent事 * 件,然後呼叫sessionCreated方法。 */ public void sessionCreated(HttpSessionEvent arg0) { System.out.println("sessionCreated start ..."); count ++; //通過事件物件(HttpSessionEvent)找到session HttpSession session = arg0.getSession(); ServletContext sctx = session.getServletContext(); //將人數count繫結到servletContext,這樣,可以隨時訪問。 sctx.setAttribute("count",count); } /** * 容器在銷燬session物件之後,會呼叫sessionDestroyed方 * 法。 */ public void sessionDestroyed(HttpSessionEvent arg0) { System.out.println("sessionDestoyed start ..."); count --; //通過事件物件(HttpSessionEvent)找到session HttpSession session = arg0.getSession(); ServletContext sctx = session.getServletContext(); //將人數count繫結到servletContext,這樣,可以隨時訪問。 sctx.setAttribute("count",count); } }
logout.jsp
因為關閉瀏覽器並不能銷燬對應的session物件,故手動刪除對應的session物件。
<%
session.invalidate();
%>
index.jsp
<body> <h1>hello</h1> This is my JSP page. <br> <!-- ServletContext == application --> 線上人數:<%=application.getAttribute("count") %><br/> <a href="logout.jsp">退出系統</a> </body>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- 配置檔案先後順序 一般是:--> <!-- 全域性引數->過濾器->監聽器->servlet、servlet-mapping->錯誤處理頁面 --> <!-- 全域性初始化引數 --> <context-param> <param-name>company</param-name> <param-value>hello</param-value> </context-param> <!-- 監聽器 --> <listener> <listener-class>web.CountListener</listener-class> </listener> <!-- 首頁 http://ip:port/appname --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
小知識:
配置檔案先後順序 一般是:
全域性引數->過濾器->監聽器->servlet、servlet-mapping->錯誤處理頁面