如何统计在线人数,急!!!

wang_zheng_wz 2003-04-03 09:13:18
要在jsp里实时统计并显示在线人数,
1、想用HttpSessionListener来做,但web服务器只支持servlet2.2,不能用。
2、想调用ServletContext的getServlets()方法,但该方法() 已经Deprecated. As of Java Servlet API 2.0, with no replacement.This method will be permanently removed in a future version of the Java Servlet API.那么将来升级jdk后会失效。
3、想在用户登陆时在application(ServletContext)里使某个attribute加1,然后用户注销登陆时减1,但如果用户直接关闭ie,或者用户断线,或其它情况(如用户直接点击重登陆链接),处理起来又太繁琐甚至无法实现。

希望能以类似1、2、的方式来解决问题,或者是否有更好的方法,大家帮忙,多谢!
...全文
86 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
farawayMemory 2003-04-08
  • 打赏
  • 举报
回复
gz
wang_zheng_wz 2003-04-08
  • 打赏
  • 举报
回复
up
wang_zheng_wz 2003-04-03
  • 打赏
  • 举报
回复
servlet2.2不支持httpsessionlistener
finerain 2003-04-03
  • 打赏
  • 举报
回复
关注
kreven 2003-04-03
  • 打赏
  • 举报
回复
session

/**
* 编写以下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>
然后重新启动你的应用服务器,访问online.jsp检查是否显示正确
试试
wang_zheng_wz 2003-04-03
  • 打赏
  • 举报
回复
在servlet2.2里有没有获得web application里当前有效session的数量的方法呢
MagicJohn 2003-04-03
  • 打赏
  • 举报
回复
应该有这样CGI,你的限制这么多,CGI可以直接在页面实现,与JSP无关
sgdb 2003-04-03
  • 打赏
  • 举报
回复
对于3,用户登陆后加个标记,attribute加1可以根据标记来定。至于直接关闭ie或用户断线,那只有设置session了,在线人数也不需要做的那么准确吧!
一点建议,仅供参考!
airlulu 2003-04-03
  • 打赏
  • 举报
回复
好像也没有什么好的办法,只能在用户登陆时记录下时间,然后每当用户有动作是就更新这个时间,用一个程序在后台轮询这个记录时间,如果与当前时间相差一个固定的值,就把该记录删掉。这样就可以统计了。这个记录可以用一个全局类实例来管理,可以减少系统开销。
missRainbowAgain 2003-04-03
  • 打赏
  • 举报
回复
gz

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧