就是放在application中一个变量,不过网络这种东西永远不可能完全精确统计只能大概估计一个数量!
例如我登录你的网站,突然断线了,你是不可能马上发现我断线的,你要经过一段时间才可以发现,在这个期间就会不精确,但是没有办法!

解决方案 »

  1.   

    可以对每个用户   session   对象注册一个事件监听器.   
      创建一个appliction   来保存在线人数.   
        
      以下是代码.   
        
      //   Java   Document   
      package   com;   
      import   java.util.*;   
      import   javax.servlet.http.*;   
        
      public   class   SessionListener   implements   HttpSessionBindingListener   {   
          
          public   String   privateInfo="";   
          public   String   logString="";   
          public   int   count=0;   
            
          public   SessionListener(String   info)   
            {   
              this.privateInfo=info;   
      }   
        
        public   int   getCount()   
            {   
              return   count;   
              }   
        
      public   void   valueBound(HttpSessionBindingEvent   event) //   事件处理。   
          {   
            count++;   
            }   
              
      public   void   valueUnbound(HttpSessionBindingEvent   event) //   事件处理。   
        
          {   
            count--;   
            }   
        }   
        
      ///以下是jsp运行实例。   
        
        
        
      <%   
      ServletContext   se=getServletConfig().getServletContext(); //取得ServletContext对象。   
        
      if((SessionListener)se.getAttribute("li"))==null)   
        
      {   
        
              SessionListener   session1=new   SessionListener("count"); //对每一个会话启动一个监听器。只设置一次。   
        
              se.setAttribute("li",session1); //将监听器对象设置成ServletContext属性。全局性,所有客户都将可以访问。   
        
      }   
        
      session.setAttribute("li",(SessionListener)se.getAttribute("li"));   //取出全局对象,并且将此对象绑定到某个对话中,此举将促使监听器调用valueBound事件,计数器加一。   
        
      out.print(((SessionListener)session.getAttribute("li")).getCount()); //打印出当前的计数器的值。getCount()取得在线的总人数。   
        
        
        %>