1、概念
事件源:被监听的对象 。监听器主要监听三个域对象 ,分别是 request session servletContext
监听器:用来监听某个对象状态变化的组件
响应行为:监听器监听的对象相应的状态发生变化时出发的动作。
2、Listener分类
在java web中,监听器的种类比较多,可以按照事件源(监听的对象)进行分类,也可以按照监听的动作进行分类。这里按照监听的动作进行分类。
(1)监听域对象自身创建和销毁的监听器:
①ServletContextListener接口 监听 SercvletContext对象
②HttpSessionListener接口 监听 HttpSession对象
③ServletRequestListener接口 监听 ServletRequest对象
(2)监听域对象中的属性的增加、修改和删除的事件监听器
⑤HttpSessionAttributeListener接口 监听 HttpSession对象属性
⑥ServletRequestAttributeListener接口 监听 ServletRequest对象属性
(3)监听绑定到 HttpSession 域中某个对象的状态的事件监听器
⑦HttpSessionBindingListener接口 监听 实现了HttpSessionBindingListener接口的对象的session绑定和解除
⑧HttpSessionActivationListener接口 (实现会话的持久化)
3、例子
(1)定义监听器
package com.web.listener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class MyListener implements ServletContextListener { static { System.out.println("MyListener加载了"); } public MyListener() { System.out.println("MyListener实例化了"); } public void contextDestroyed(ServletContextEvent sce) { } public void contextInitialized(ServletContextEvent sce) { sce.getServletContext(); System.out.println("ServletContext创建开始"); } }
package com.web.listener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class MySessionListener implements HttpSessionListener { static { System.out.println("MySessionListener加载了"); } public MySessionListener() { System.out.println("MySessionListener实例化了"); } public void sessionCreated(HttpSessionEvent se) { } public void sessionDestroyed(HttpSessionEvent se) { } }
package com.web.listener; import javax.servlet.ServletRequestEvent; import javax.servlet.ServletRequestListener; public class MyRequestListener implements ServletRequestListener{ static { System.out.println("MyRequestListener加载了"); } public MyRequestListener(){ System.out.println("MyRequestListener实例化了"); } public void requestDestroyed (ServletRequestEvent sre) { } public void requestInitialized (ServletRequestEvent sre) {} }
(2)注册监听器
<!-- 注册监听器 --> <listener> <listener-class>com.web.listener.MyRequestListener</listener-class> </listener> <listener> <listener-class>com.web.listener.MySessionListener</listener-class> </listener> <listener> <listener-class>com.web.listener.MyListener</listener-class> </listener>
(3)执行结果
监听器的加载顺序时web.xml中配置的顺序一直
4、生命周期
监听器在容器启动时加载并且实例化,容器关闭时销毁。
5、监听器,过滤器,Servlet三大组件的加载顺序
监听器与过滤器都是在web容器启动时就加载,但是监听器加载的更早。Servlet默认时在第一次访问时加载,通过<load-on-startup>标签可以配置成web容器启动时就加载,但是Servlet加载的时机是三大组件中最晚的。
所以三大组件的加载顺序是:Listener ->Filter->Servlet
原文地址:https://www.cnblogs.com/cplinux/p/12427420.html