監聽器小例子
統計同時線上人數:
每當有一個使用者登入的時候在伺服器端建立一個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" target="_blank" rel="external nofollow" >退出系統</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->錯誤處理頁面