JSP实现用户在线名单的问题!高手过来帮忙!

DarkAngell2000 2001-06-14 08:58:00
我要实现如ASP一样的用户再线名单统计,但服务器是RESIN,不支持global.jsa,很难捕捉到SESSION ONEND这个事件,所以我想从SOCKET考虑,一个用户和服务器连接上以后就自动创建了一个SOCKET,我现在想得到这个已经创建的SOCKET,不知可行否?
或者还有什么别的好办法能实现在线名单统计?拜托高手或者有经验之人能给我一点思路!谢谢!
...全文
38 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
newroc 2001-06-14
  • 打赏
  • 举报
回复
有一种方案如下:
openDb.executeQuery("update onlineuser set logondate=sysdate where username='"+name+"'");
如果用户在线的话,把logondate记为当前时间
openDb.executeQuery("delete from onlineuser where (logondate+1/360)<sysdate");
如果用户最后在线时间与当前时间大于4分钟,说明用户已经离开,在onlineuser中删除此用户
如果这两句sql语句都写在iframe中,当用户离线时,iframe也关闭了,第二句
openDb.executeQuery("delete from onlineuser where (logondate+1/360)<sysdate");怎么执行呢???

还用一种方案如下:
登录加入:
<jsp:useBean id="monitor" scope="application" class="java.util.HashMap" />

monitor.put(session,user.getUserName());//user是个对象类
UserMap map = new UserMap();
map.setMap(monitor);
session.setAttribute("Binder.object",map);

UserMap是一个实现HttpSessionListener的类:
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
import java.util.*;

public class UserMap implements HttpSessionBindingListener {
private HashMap map;

public void valueBound(HttpSessionBindingEvent event) {
}

public void valueUnbound(HttpSessionBindingEvent event) {
map.remove(event.getSession());
}

public void setMap(HashMap map){
this.map = map;
}
}

退出时jsp:
((HashMap)application.getAttribute("monitor")).remove(session);
session.invalidate();

查询在线用户jsp:
HashMap monitor = ((HashMap)application.getAttribute("monitor"));
Iterator keyIter = monitor.keySet().iterator();

while(keyIter.hasNext()){
HttpSession https = (HttpSession)keyIter.next();

out.println("<tr>");

out.println("<td bgcolor=\"EEEEEE\" width=\"5%\">");
out.println("<div align=\"center\">" + (String)monitor.get(https) + "</div>");
out.println("</td>");
....
....
}

81,091

社区成员

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

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