站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题HttpSessionBindingListener的问题,困惑啊!!

HttpSessionBindingListener的问题,困惑啊!!

摘要: HttpSessionBindingListener的问题,困惑啊!!


我写了个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()方法,实在是想不明白啊,其他两个方法倒是工作正常。恳请高手请教啊!


if (event.getName() == "SaveSessionBeanForm") {
logger.info("用户退出!");
}

event.getName() == "SaveSessionBeanForm"这样比较字符串不对吧

应该用event.getName().equals("SaveSessionBeanForm")吧


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


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


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


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


的valueBound()


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


感谢诸位的回复,送分:)


↑返回目录
前一篇: 在ie 6.0.2900版本上,如何设置cookie的可用性?
后一篇: 请问各位大虾怎么样才能让弹出的确认框的默认焦点在“不是”按钮上?谢谢