Servlte监听器:监听在线人数
什么是Servlte监听器?
Servlet监听器也叫做 listener,可以监听客户端的请求,服务端的操作等。
监听器Listener就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。
监听器的作用
当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。常用于统计在线人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等等。
通过监听器,可以自动激发一些操作,比如监听在线人数:
当登陆成功时,监听器监听到session属性增加,在线人数加1;
当退出登陆时,监听器监听到session属性减少,在线人数减1。
监听器怎么工作?
监听器就是用来监听 ServletContext, HttpSession,和HttpServletRequest这三个对象,其中的三个接口都定义了三个方法来处理被监听对象中的属性的增加,删除和替换的事件。
响应方法 | 属性变更 |
---|---|
attributeAdded 方法 | 向被监听对象中增加一个属性 |
attributeRemoved 方法 | 删除被监听对象中的一个属性 |
attributeReplaced 方法 | 监听器的域对象中的某个属性被替换 |
简单代码实现
对实时在线人数的监听:
@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);
}
}
@Override
public void attributeRemoved(HttpSessionBindingEvent se) {
System.out.println("OnlineListener.attributeRemoved");
}
}
注:在显示在线人数处通过session.getAttribute(“Count”)即可获取在线人数值。