posts - 5, comments - 14, trackbacks - 0, articles - 11

关于JSP在线显示及单人登陆解决办法

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 ();
%>;


只有注册用户登录后才能发表评论。


网站导航: