不好意思,错了
是创建实现绑定session接口的那个类的对象时调用

解决方案 »

  1.   

    你,那就是session.setAttribute("listener",listener)//listener是监听类
    是这个时候调用马?
      

  2.   

    不是的
    public class SessionListener implements HttpSessionBindingListener{}
    这个类就是实现了与session的绑定,这个类有方法
    public void valueBound(HttpSessionBindingEvent event)
    public void valueUnbound(HttpSessionBindingEvent event)
    当在一个新的session中创建了这个类的对象时调用valueBound方法
      

  3.   

    Session代表客户的会话过程,客户登录时,往Session中传入一个对象,即可跟踪客户的会话。在Servlet中,传入Session的对象如果是一个实现HttpSessionBindingListener接口的对象(方便起见,此对象称为监听器),则在传入的时候(即调用HttpSession对象的setAttribute方法的时候)和移去的时候(即调用HttpSession对象的removeAttribute方法的时候或Session Time out的时候)Session对象会自动调用监听器的valueBound和valueUnbound方法(这是HttpSessionBindingListener接口中的方法)。
      

  4.   

    到“当在一个新的session中创建了这个类的对象时调用valueBound方法”
    能不能举个例子啊,老大
    是不是SessionListener listener=new SessionListener();的时候调用
    valueBound
      

  5.   

    用户一连到网站就会被监听到,就会执行valueBound
    个人观点
      

  6.   

    最近一个项目中用jsp实现用户登录,当然是使用session来保持。这个用implements HttpSessionBindingListener接口来实现,这个是我写的简要代码。
    public class OnLineUser implements HttpSessionBindingListener {
      private NewUser  newUser=null;
      public OnLineUser() {
       newUser=new NewUser();
      }
    public boolean   existUser(String  str)
    {
      return false;
    }  public void valueBound(HttpSessionBindingEvent e) {
        String tempName=e.getName();
        //Integer m=new  Integer(tempName);
        newUser.setUserName(tempName);
        try {
        newUser.updateOnline();
        }
        catch (Exception ex) {
        }
    System.out.println("用户"+tempName+"上限");
      }  public void valueUnbound(HttpSessionBindingEvent e) {
        String tempName=e.getName();
        //Integer m=new  Integer(tempName);
       newUser.setUserName(tempName);
        try {
        newUser.updateUnline();
        }
        catch (Exception ex) {
        }
    System.out.println("用户"+tempName+"下限");
      }
    }在登录处理的servlet中调用
                                 OnLineUser onLineUser=new OnLineUser();
                                 request.getSession(false).setAttribute(login_no,onLineUser);
    其中login_no是变量是登录名称。同时要把request.getSession(false)值设为false,他有true和false两个值,true为如果如果没有相同的session则创建。如果有则覆盖,false则没有则创建有则不创建,我要用这个实现单点登录所以用了false。这样就可以监听你创建的session了。如果session超时,则执行valueUnbound方法。创建session则执行valuebound方法。我在这里是对人员的一个状态字段进行更改。这样当这个用户在线的时候,另一个用户在另外的机子上线时在登录页面我就可以进行判断了。这方面的资料网上有很多,后来遇到问题就是当设置session超时时间为1分钟时。用户不正常退出可以一分钟后可以正常改变用户下线状态,但是用户如果1分钟内电脑没有操作也同时会吊线,我在网上找了很长时间,没有这方面的资料。后来我用我的一个框架(我的程序用的是框架,我用的是底部框架)
    javax.servlet.http.HttpSession session2 = request.getSession(false);
    com.chinantn.oa.util.OASession oasession =
        (com.chinantn.oa.util.OASession) session2.getAttribute("oasession");
    这个是我的登录页面用的一个处理session的类。然后在这个页面中加入
    <meta http-equiv="refresh" content="30;URL=foot.jsp">.做成自动刷新。
    间隔时间小于session超时时间。主要目的是如果页面在超时时间内没有访问的话用这个自动刷新访问一下session这样来解决问题。因为我在网上找了好长时间没有找到解决这个问题的文章所以,把我后来想的解决方法写出来,希望对那些碰到这类问题的人有些帮助。如果有问题可以联系我,ljunjie