Posted on 2006-04-19 15:55
何以解忧,唯有学习!让每一个人都能Open Source 阅读(516)
评论(1) 编辑 收藏 所属分类:
Web相关
今天在chinaitpower上看到这样一篇文章,原文内容如下:
/**
* 编写以下SessionCounter.java
* 并编译为SessiionCounter.class
* 然后放到你的网站的classpath的
* SessionCount(自己建立此目录)下面
*/
package SessionCount;
import javax.servlet.*;
import javax.servlet.http.*;
public class SessionCounter implements HttpSessionListener {
private static int activeSessions = 0;
public void sessionCreated(HttpSessionEvent se) {
activeSessions++;
}
public void sessionDestroyed(HttpSessionEvent se) {
if(activeSessions > 0)
activeSessions--;
}
public static int getActiveSessions() {
return activeSessions;
}
}
接着建立online.jsp文件用于显示在线人数
<%@ page import="SessionCount.SessionCounter" %>
在线:<%= SessionCounter.getActiveSessions() %>
然后需要在你的网站的WEB-INF中建立web.xml
文件内容如下:
<!-- Web.xml -->
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/j2ee/dtds/web-app_2.3.dtd">
<web-app>
<!-- Listeners -->
<listener>
<listener-class>
SessionCount.SessionCounter
</listener-class>
</listener>
</web-app>
试了一下,发出当用户调用SessionCounter类时sessionCreated方法被执行,activeSessions加1,但是,关闭浏览时
sessionDestroyed并没有被执行,为什么呢,原因是因为关浏览器不一定会释放session,所以,导致sessionDestroyed
不会被执行,那么,有什么方法呢,退出页面logout.jsp上,使用session.invalidate()释放会话,那么sessionDestroyed
也就被执行,在线人数也就相应的减1,或是设置session的不活动时间等等。