天天看點

監聽器小例子之統計線上人數

監聽器小例子

統計同時線上人數:

每當有一個使用者登入的時候在伺服器端建立一個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->錯誤處理頁面

上一篇: JNIjw02