监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。
监听器:事件源、事件监听器、事件对象
在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为 ServletContext, HttpSession 和 ServletRequest 这三个域对象。
Servlet规范针对这三个对象上的操作,又把这多种类型的监听器划分为三种类型:
- 监听三个域对象创建和销毁的事件监听器
- 监听域对象中属性的增加和删除的事件监听器
- 监听绑定到 HttpSession域中的某个对象的状态的事件监听器。
- ServletContextListener:可以用来监听web应用的创建和销毁事件,当使用框架进行开发时,可以在监听器里启动框架;
- HttpSessionListener:可以用来监听Session对象的创建和销毁事件,可用来计算在线人数,当session创建时count++,销毁时count–;
- RequestListener:可以用来监听Request的创建和销毁事件,可以用来做网站性能(点击量)统计;
统计在线人数
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class CountNumListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent se) {
ServletContext context = se.getSession().getServletContext();
Integer count = (Integer) context.getAttribute("count");
if(count==null){
count = 1;
context.setAttribute("count", count);
}else{
count++;
context.setAttribute("count", count);
}
}
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext context = se.getSession().getServletContext();
Integer count = (Integer) context.getAttribute("count");
count--;
context.setAttribute("count", count);
}
}