项目中需要统计在线用户数,用了HttpSessionListener,LoginController调用request.getSession(),HttpSessionListener事件监听器的sessionCreated不执行。
相关代码
@WebListener
public class SessionListener implements HttpSessionListener, HttpSessionAttributeListener {
public static final Logger logger = LoggerFactory.getLogger(SessionListener.class);
/**
* 记录session的数量
*/
public int count = 0;
public SessionListener(){
logger.info("SessionListener......");
}
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
logger.info("===============sessionCreated===============");
System.out.println("【HttpSessionListener监听器】count++ 增加");
count++;
httpSessionEvent.getSession().getServletContext().setAttribute("count", count);
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
logger.info("===============sessionDestroyed===============");
System.out.println("【HttpSessionListener监听器】count-- 减少");
count--;
httpSessionEvent.getSession().getServletContext().setAttribute("count", count);
}
@Override
public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("1111111111111111111111111111");
}
@Override
public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("222222222222222222222222222222");
}
@Override
public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("333333333333333333333333333333333");
}
项目启动时,有打印SessionListener......,说明已经监听类已经初始化,有调用到监听。
打印SessionListener...... 只能说明这个监听器被spring容器归纳,因为你这句是在构造函数里。
除了写一个@WebListener的类之后。还需要configuration配置这个监控器