用监听器监听session。new session +1
close session -1
就可以了

解决方案 »

  1.   

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