package BookStore;
import java.util.*;
import javax.servlet.http.*;public class BookStoreSessionListener extends HttpServlet implements HttpSessionListener
{
private  static  int  intSessionsCount  =  0;    
   public void sessionCreated(HttpSessionEvent e)
{
HttpSession session = e.getSession();
 if(session!=null)  
         {  
                     intSessionsCount++;  
         }  
            
              Integer ing = new Integer(getSessionsCount());
              session.setAttribute("count",ing);
session.setAttribute(Utils.SHOPPING_CART,new ShoppingCart());
}

public void sessionDestroyed(HttpSessionEvent e)
{
HttpSession session = e.getSession();
 if(session!=null)  
         {  
                 
                     if(intSessionsCount  >  0)  intSessionsCount--;
         }
   
              session.removeAttribute(Utils.SHOPPING_CART);
}

public  static  int  getSessionsCount()    
    {    
                return  intSessionsCount;    
    }    
}这是一个购书项目,我想做在线人数的显示(来1个+1个人,走了1个-1个人那样),不过只增不减,也就是说destroy方法没调用到,我不明白是什么原因(帮忙改一下上面的代码和写JSP中的调用代码)

解决方案 »

  1.   

    BS楼主不给分session有一个默认的有效期,(好象是20分钟),你20分钟之后再看在线人数
      

  2.   

    怎么调session的有效期呢?另外我不是不给分,我是昨天刚注册的
      

  3.   

    用session控制很难的也不回很精确
      

  4.   

    这是一个购书项目,我想做在线人数的显示(来1个+1个人,走了1个-1个人那样),不过只增不减,也就是说destroy方法没调用到,我不明白是什么原因你确认自己测试的时候,session已经销毁了但destroy方法没有被调用?不太可能啊,试试System.out.println输出点东西看看。
    测试的时候,如果session生命周期还没有到,为使session被销毁,要关闭那个浏览窗口。另外,HttpSessionListener是线程安全的么?不需要自己做串行化处理么?
      

  5.   

    具体的代码帮帮我, yinj(笑笑生)你去回复我另一张贴子,我可以给你家分的
      

  6.   

    yinj(笑笑生)  我是ActiveT(小陈)着是我的另一个号,你刚刚说的我试了,关闭浏揽器的时候没有
    打印出东西,证明没有调用到destory方法,但是在线人数的具体代码怎么写呢?给我个提示也好啊
      

  7.   

    先创建一个session
    Listener lis=new Listener(userlog);
    session.setAttribute("listener",lis) ;当session销毁的时候,就会执行下面的代码
    import javax.servlet.http.*;
    import com.bxsys.hibernate.Userlogonlog;
    import com.bxsys.userlog.*;public  class Listener implements HttpSessionBindingListener{
      private Userlogonlog userlog;  public Listener(Userlogonlog userlog){
        this.userlog =userlog;
      }
      public void valueBound(HttpSessionBindingEvent se){  }
      public void valueUnbound(HttpSessionBindingEvent se){
        try{
         bxsyslog syslog = new bxsyslog();//session销毁是执行的代码
         syslog.userLogout(this.userlog);//session销毁是执行的代码
        }catch(Exception e){}
      }}