Chinaunix
标题:
关于JSP在线显示的????
[打印本页]
作者:
zhangyunpo
时间:
2003-04-26 10:00
标题:
关于JSP在线显示的????
在JSP中怎么能显示在线的用户人数??
怎么统计??什么方法??谢谢解答!!
作者:
seth
时间:
2003-05-01 02:28
标题:
关于JSP在线显示的????
用application对象。
简单描述如下:
当用户登录时维护一个会话对象:UserInfo类的实例,同时UserInfo类实现javax.servlet.http.HttpSessionBindingListener接口:
import java.util.Map;
import java.util.HashMap;
import javax.servlet.http.*;
import javax.servlet.ServletContext;
public class UserInfo implements HttpSessionBindingListener {
// 用户信息
int userId;
String userName;
......
/**
* 当UserInfo类被绑定到session中时触发这个事件
* 具体信息请参见Servlet/JSPs的规范
*/
public void valueBound(HttpSessionBindingEvent event) {
HttpSession session = event.getSession ();
ServletContext ctx = session.getServletContext ();
Map map = (Map)ctx.getAttribute ("users"
;
if (map == null) { // 如果是服务器启动后的第一个登录用户,新建一个容器
map = new HashMap ();
ctx.setAttribute ("users", map);
}
map.put (userName, this); // 把自己加入容器中
}
/**
* 当UserInfo类从session中删除时触发这个事件
* 具体信息请参见Servlet/JSPs的规范
*/
public void valueUnbound(HttpSessionBindingEvent event) {
HttpSession session = event.getSession ();
ServletContext ctx = session.getServletContext ();
Map map = (Map)ctx.getAttribute ("users"
;
map.remove (this); // 把自己从容器中删除
}
......
}
以后在JSP中就可以这样显示在线用户数了:
<%
int userCount = 0;
java.util.Map map = (java.util.Map)application.getAttribute ("users"
;
if (map == 0) userCount = 0;
else userCount = map.size ();
%>;
当然你也可以不实现javax.servlet.http.HttpSessoinBindLisenter接口,而用自己的程序来实现这个功能,但这种方法最保险,也最简单
作者:
zhangv
时间:
2003-05-03 20:18
标题:
关于JSP在线显示的????
还有一个问题
如果用户是关掉浏览器离开的
这个事件怎么处理?
作者:
seth
时间:
2003-05-03 21:01
标题:
关于JSP在线显示的????
没关系的,如果用户关掉浏览器,过一段时间后session就会超时,这时发触发valueUnbound事件
作者:
zhangv
时间:
2003-05-03 22:06
标题:
关于JSP在线显示的????
[quote]
原帖由 "seth"]没关系的,如果用户关掉浏览器,过一段时间后session就会超时,这时发触发valueUnbound事件[/quote 发表:
哦~~~~知道了
但是我现在,removeAttribute("users"
之后为什么对象还在列表里?
作者:
seth
时间:
2003-05-03 22:08
标题:
关于JSP在线显示的????
不太明白你所指的是什么。能不能说的更详细一些?
作者:
zhangv
时间:
2003-05-03 22:24
标题:
关于JSP在线显示的????
[quote]
原帖由 "seth"]不太明白你所指的是什么。能不能说的更详细一些?[/quote 发表:
是这样的:
我想做一个在线用户列表.
登录成功后,我把这个实现了sessionbindinglistener的user(类似你上面写的那个userInfo)加入倒session里.(现在这个用户被加入了列表)
但是有两个问题
关于如何把用户从列表中删除)
1.我的注销操作是这样的:session.removeAttribute("user"
,但是显示列表是这个用户仍然存在....奇怪
2.你说的session的失效时间,session是失效了,但是用户也没有从列表中删除.
(说完)
不如在qq上说吧.66315033
作者:
seth
时间:
2003-05-04 20:09
标题:
关于JSP在线显示的????
不好意思,在valueUnbound中的
map.remove (this)
改为
map.remove (this.userName)
就行了
作者:
zhangyunpo
时间:
2003-05-06 20:04
标题:
关于JSP在线显示的????
请问 是什么符号??多谢!!
作者:
zhangyunpo
时间:
2003-05-06 20:05
标题:
关于JSP在线显示的????
是空格吗?? ?? ??
作者:
seth
时间:
2003-05-06 20:30
标题:
关于JSP在线显示的????
什么空格?
作者:
fatkite
时间:
2004-11-10 09:41
标题:
关于JSP在线显示的????
请问这位大侠,在valueBound和valueUnbound里面,用不着加入ctx.setAttribute(map);吗?
作者:
longyunfei
时间:
2004-11-16 23:23
标题:
关于JSP在线显示的????
如果我想关闭浏览器,就立即反映。应该怎么做啊?
作者:
moonight
时间:
2004-11-17 07:46
标题:
关于JSP在线显示的????
我觉得seth的意思已经说到了。但是代码有些问题,估计要运行还得再改改。
开眼界。我原来用的是HttpSessionAttributeListener。是自己生成在线列表,不是用application。意思差不多。
我总觉得直接让UserInfo这个属性类继承servlet的监听器而且影响application的属性。恐怕分层不是很清晰。
作者:
longyunfei
时间:
2004-11-21 19:24
标题:
关于JSP在线显示的????
我有个问题,想请教,就是怎么判断session失效,最好在session失效时,就立即作出响应.而不是等到删除session的时候再做处理.
作者:
菜鸟CC
时间:
2004-11-22 10:59
标题:
关于JSP在线显示的????
关掉浏览器 session的活动周期不是停止了吗
作者:
ruknow
时间:
2004-11-22 22:32
标题:
关于JSP在线显示的????
[quote]
原帖由 "longyunfei"]我有个问题,想请教,就是怎么判断session失效,最好在session失效时,就立即作出响应.而不是等到删除session的时候再做处理.[/quote 发表:
--------------------------------------------------------------
<session-config>;
<session-timeout>;30</session-timeout>;
</session-config>;
把这个数改小,但也有不好之处
立即作出响应 目前可能还没有办法,要知道这是request/response机制
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2