首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

关于HttpSessionBindingListener的valueUnbound有关问题

2012-01-19 
关于HttpSessionBindingListener的valueUnbound问题大家好,我用HttpSessionBindingListener监听用户的登录

关于HttpSessionBindingListener的valueUnbound问题
大家好,我用HttpSessionBindingListener监听用户的登录及注销,在测试的时候,发现登录是没有问题的,即每次有新用户登录时,都会进入到valueBound方法,但是当用户注销时,valueUnbound中,只进来一次,即我连续注销几个用户,只有注销第一个时才会进入valueUnbound方法,其余的均不进去。
  请教各位,有没有遇到过这个问题,该如何解决呢?(既然登录测试顺利通过,且注销一次也可以,说明我的代码应该没问题的啊),以下是我的代码,各位不妨一看:

Java code
// 这是监听器代码public class UserListener implements HttpSessionBindingListener {        private final static String ON_LINE_USERS  = "onLineUsers";    private final static String CURRENT_USER   = "currentUser";    private Integer userId;    // 当有用户登录时,便把该用户信息保存在当前servlet上下文的map中    public void valueBound(HttpSessionBindingEvent event) {        User user = (User) event.getSession().getAttribute(CURRENT_USER);        if (null != user) {            Map onLineUsers = getMap(event);            onLineUsers.put(user.getId(), user);            userId = user.getId();            event.getSession().getServletContext().setAttribute(ON_LINE_USERS, onLineUsers);        }    }    // 当有用户退出时,便从当前servlet上下文中清除该用户信息    public void valueUnbound(HttpSessionBindingEvent event) {        Map onLineUsers = getMap(event);        onLineUsers.remove(userId);        event.getSession().getServletContext().setAttribute(ON_LINE_USERS, onLineUsers);    }    //得到用来存储用户的map对象    public Map getMap(HttpSessionBindingEvent event) {        Map map = (Map) event.getSession().getServletContext().getAttribute(ON_LINE_USERS);        if (null == map) {            map = new HashMap();        }        return map;    }}// 这是注销的代码(我用了struts1)public ActionForward quit(ActionMapping mapping, ActionForm form,            HttpServletRequest request, HttpServletResponse response) {                request.getSession().setAttribute(CURRENT_USER, null);        request.getSession().removeAttribute(USER_LISTENER);        return null;    }

请指教,谢谢~~

[解决办法]
退出销毁session应该使用HttpSessionListener的sessionDestroyed方法啊, 
也就是说你应该使用HttpSessionListener接口

热点排行