监听器的概念
所谓监听器就是对内置对象的状态或者属性变化进行监听并且做出反应的特殊servlet,并且也需要在web.xml文件中进行相关配置。
内置对象的状态变化:初始化和销毁,也就是说当内置对象初始化、销毁我们也能监听,并且做出相应的反应。
内置对象内得属性变化:增加、删除、修改的操作也能被监听并做出反应
监听request内置对象
- 首先创建request监听器,不同的监听器,需要不同的接口,request内置对象的监听器接口“javax.servlet.ServletRequestListener”。
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
//注解配置
@WebListener
public class RequestListener implements ServletRequestListener {
@Override
public void requestDestroyed(ServletRequestEvent sre) {
// 监听request销毁后的做出的反应
System.out.println("销毁request内置对象");
}
@Override
public void requestInitialized(ServletRequestEvent sre) {
// 监听request初始化后的反应
System.out.println("创建request内置对象");
}
}
-
由于代码使用了注解配置,我就不用再去web.xml里面进行设置配置。web.xml里面的配置如下
-
进行简单的测试,测试代码如下:
//这里是注解配置
@WebServlet(urlPatterns= {"/emp/*"})
public class EmpServlet<V> extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
}
}
在浏览器的地址栏输入:http://localhost/+项目路径
测试结果如下:
结果可以说明,request的初始化,销毁过程都被监听到了,并且监听器也做出了反应。
监听器的种类用途
监听器有八种类型
Listener接口 | Event类 |
---|---|
ServletContextListener | ServletContextEvent |
ServletContextArrtibuteListener | ServletContextAttributeEvent |
HttpSessionListener | HttpSessionEvent |
HttpSessionActivationListener | HttpSessionEvent |
HttpSessionAttributeListener | HttpSessionBindingEvent |
HttpSessionBindingListener | HttpSessionBindingEvent |
ServletRequestListener | ServletRequestEvent |
ServletRequestAttributeListener | ServletRequestAttributeEvent |
监听器的平常用途
- 统计在线人数
- 加载初始化信息
- 统计网站访问量
- 实现访问监控