定义
监听器实际上是一个类,这个类实现了特定的接口,然后将这个类在 web.xml (servlet 3.0后可以用注解)文件中进行描述,这样服务器在启动的时候就可以实例化这个类,启动监听器。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。
web监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext,HttpSession,ServletRequest等域对象的创建、销毁、以及属性的变化等,可以在事件发生前、发生后进行一些处理。
用途
1、统计在线人数和在线用户
2、系统加载时进行信息的初始化工作
3、统计网站的访问量
4、跟Spring结合
...
分类
按监听的对象划分,可以分为监听
1.ServletContext对象
2.HttpSession对象
3.ServletRequest对象
按监听的事件划分
1.域对象自身的创建和销毁
2.域对象中属性的创建和消除
3.绑定到session中的某个对象的状态
servlet 3.0
在Servlet3.0下通过注解@WebListener("")就可以实现了,不需要在web.xml中进行配置
实例
监听器>过滤器>serlvet,在 web.xml 文件中配置的时候注意顺序
监听每个action的执行时间
@WebListener
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("服务器已经启动");
ServletContext context = sce.getServletContext();
try {
Servlet servlet = context.createServlet(GoodByeServlet.class);
ServletRegistration.Dynamic reg =
context.addServlet("GoodbyeServlet", servlet);
reg.addMapping("/goodbye.do");
} catch (ServletException e) {
e.printStackTrace();
}
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("服务器正在关闭");
}
}
监听在线人数
@WebListener
public class ThyListener implements HttpSessionListener {
private int counter = 0;
public void sessionCreated(HttpSessionEvent se) {
counter += 1;
System.out.println("在线人数: " + counter);
}
public void sessionDestroyed(HttpSessionEvent se) {
counter -= 1;
System.out.println("在线人数: " + counter);
}
}