Posted on 2007-01-26 13:42
东舟 阅读(210)
评论(0) 编辑 收藏 所属分类:
JAVA
当用户登录时维护一个会话对象: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.userName); // 把自己从容器中删除
}
......
}
以后在JSP中就可以这样显示在线用户数了:
<%
int userCount = 0;
JAVA.util.Map map = (java.util.Map)application.getAttribute ("users");
if (map == 0) userCount = 0;
else userCount = map.size ();
%>;