我写了个session监听,目的是记录用户的登陆时间和注销系统时间,代码如下:
public class SessionListener implements HttpSessionListener,
        HttpSessionBindingListener {
    private Logger logger = Logger.getInstance(SessionListener.class);
    public SessionListener() {
    }    public void sessionCreated(HttpSessionEvent se) {
     //工作正常!
    }    public void sessionDestroyed(HttpSessionEvent se) {
        //工作正常
        logger.info("用户退出成功!");
    }    public void valueBound(HttpSessionBindingEvent event) {
         /**@todo ...*/
        logger.info("event.getName()="+event.getName());
        if (event.getName() == "SaveSessionBeanForm") {
            logger.info("用户登陆!");
        }
    }    public void valueUnbound(HttpSessionBindingEvent event) {
        /**@todo ...*/
        logger.info("event.getName()="+event.getName());
        if (event.getName() == "SaveSessionBeanForm") {
            logger.info("用户退出!");
        }
    }
}为了方便说明问题,去掉了具体的出来逻辑。在上面代码中,总是进不了valueBound()和valueUnbound()方法,实在是想不明白啊,其他两个方法倒是工作正常。恳请高手请教啊!

解决方案 »

  1.   

    if (event.getName() == "SaveSessionBeanForm") {
                logger.info("用户退出!");
            }event.getName() == "SaveSessionBeanForm"这样比较字符串不对吧应该用event.getName().equals("SaveSessionBeanForm")吧
      

  2.   

    web。xml里面有没有添加该listener???而且要放最前面
      

  3.   

    回zhangj0571(笨鸟飞飞) 的:
       已经在web.xml中配置了,而且在用户打开浏览器和注销时,sessionCreated()和sessionDestroyed()都打印出log信息,证明已经进入到该函数;但是在web运行过程中,在session.setAttribute()时,该函数总没log信息,这就证明没进入到valueBound()方法。
      

  4.   

    回鲲哥:
        你说的确实是bug,已经修改了,谢谢:)
        可是,在session.setAttribute()时,valueBound()的 if()进入不了那还想得通,可是logger.info("event.getName()="+event.getName());语句也没反应,这就不正常了
      

  5.   

    session.setAttribute("name",new SessionListener());
    这样才会触发你的listener
      

  6.   

    问题已解决,继承HttpSessionAttributeListener即可,不要继承HttpSessionBindingListener