Java之Listener
Listener監聽器
監聽器有很多種,大部分還是在GUI用的比較多,這裏簡單記錄一點關於HttpSessionListener的
統計session count Listener。主要通過ServletContext上下文來存儲session count,在listener中create和destroyed方法實現session count的邏輯,主要是將ServletContext作爲第三方來進行session count值的存儲與改動。通過jsp中application對象get上下文屬性來獲取count值實現實時顯示session的數量。
public class OnlineCountListener implements HttpSessionListener {
//創建session監聽
//一旦創建session就會觸發該事件
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
System.out.println(httpSessionEvent.getSession().getId());
//每次有session創建,代表用戶數量+1
HttpSession session = httpSessionEvent.getSession();
//獲取上下文,將人數OnlineCount存入上下文中方便讀寫
ServletContext sct = session.getServletContext();
Integer OnlineCount = (Integer) sct.getAttribute("OnlineCount");
if (OnlineCount==null){
OnlineCount = new Integer(1);
}else {
int count = OnlineCount.intValue();
OnlineCount = new Integer(count+1);
}
//數值通過屬性存入上下文中
sct.setAttribute("OnlineCount", OnlineCount);
}
//銷燬session監聽
//一旦銷燬session就會觸發該事件
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
//每次有session創建,代表用戶數量+1
HttpSession session = httpSessionEvent.getSession();
//獲取上下文,將人數OnlineCount存入上下文中方便讀寫
ServletContext sct = session.getServletContext();
Integer OnlineCount = (Integer) sct.getAttribute("OnlineCount");
if (OnlineCount==null){
OnlineCount = new Integer(0);
}else {
int count = OnlineCount.intValue();
OnlineCount = new Integer(count-1);
}
//數值通過屬性存入上下文中
sct.setAttribute("OnlineCount", OnlineCount);
}
}
web.xml配置Listener
<listener>
<listener-class>com.zh1z3ven.listener.OnlineCountListener</listener-class>
</listener>
Index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>OnlineCount</title>
</head>
<body>
<h2 align="center">當前在線人數爲:<span><%= application.getAttribute("OnlineCount")%></span></h2>
</body>
</html>