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

DarkAngell2000 2001-06-14 08:58:00
我要实现如ASP一样的用户再线名单统计,但服务器是RESIN,不支持global.jsa,很难捕捉到SESSION ONEND这个事件,所以我想从SOCKET考虑,一个用户和服务器连接上以后就自动创建了一个SOCKET,我现在想得到这个已经创建的SOCKET,不知可行否?
或者还有什么别的好办法能实现在线名单统计?拜托高手或者有经验之人能给我一点思路!谢谢!
...全文
22 点赞 收藏 1
写回复
1 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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>");
....
....
}
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2001-06-14 08:58
社区公告
暂无公告