Listener监听器
监听器Listener就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。
Listener是Servlet的监听器,可以监听客户端的请求,服务端的操作等。
创建Listener
实现ServletContextListener接口,重写其中方法。
用Listener实现在线人数统计
以下代码实现了对实时在线人数的监听:
import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
@WebListener
public class OnlineListener implements HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent se) {
System.out.println("OnlineListener.attributeAdded");
String name = se.getName();
//System.out.println("name = " + name);
//登录用户的session发生变化
if("account".equals(name)){
ServletContext application = se.getSession().getServletContext();
int online_num = application.getAttribute("online_num") == null ? 0 : (Integer) application.getAttribute("online_num");
System.out.println("online_num = " + online_num);
online_num++;
application.setAttribute("online_num",online_num);
}
//String value = (String) se.getValue();
//System.out.println("name = " + name);
//System.out.println("value = " + value);
}
@Override
public void attributeRemoved(HttpSessionBindingEvent se) {
System.out.println("OnlineListener.attributeRemoved");
String name = se.getName();
//退出 用户的session发生变化
if("account".equals(name)){
ServletContext application = se.getSession().getServletContext();
int online_num = application.getAttribute("online_num") == null ? 0 : (Integer) application.getAttribute("online_num");
System.out.println("online_num = " + online_num);
online_num--;
application.setAttribute("online_num",online_num);
}
}
}