1. 程式人生 > >監聽器小例子之統計線上人數

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

監聽器小例子

統計同時線上人數:

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