Listener监听器
1.Listener监听器介绍
- Listener监听器是JavaWeb三大组件之一。JavaWeb三大组件分别是:Servlet程序,Listener监听器,Filter过滤器。
- Listener是JavaEE的规范,即接口。
- 监听器的作用是,监听某种变化(一般就是对象的创建/销毁,属性变化),触发对象方法完成相应的任务。
- JavaWeb中的监听器共八个,目前最常用的是ServletContextListener,ServletContextAttributeListener,HttpSessionListener和ServletRequestListener。
2.JavaWeb的监听器
2.1ServletContextListener监听器
- 作用:监听ServletContext创建或者销毁(当我们web应用启动时,Tomcat就会创建ServletContext对象),即生命周期监听
- 应用场景:
- 加载初始化的配置文件;比如spring的配置文件
- 任务调度(配合定时器Timer/TimerTask)
- 相关方法:
- void contextInitialized(ServletContextEvent sce):创建ServletContext对象时触发
- void contextDestroyed(ServletContextEven sce):销毁ServletContext对象时触发
应用实例
-
首先创建一个项目,添加web支持,因为listener监听器是Servlet规范,要使用就要引入Servlet.jar包
-
创建一个普通类,如果该类实现了某个监听接口,那么此类就是一个监听器。该类可以监听的事件由该类实现的监听接口决定:
package com.listener; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; /** * 1.当一个类实现了 ServletContextListener 接口时 * 2.该类就是一个监听器 * 3.该类可以监听的事件由该类实现的监听接口决定 ,比如实现ServletContextListener接口, * 那么该类就可以监听ServletContext对象的创建和销毁,以此类推 * 4.下面的MyServletContextListener就是一个监听者 * 5.当web应用启动时,就会产生ServletContextEvent事件,会调用监听器的对应事件处理方法 * 如:contextInitialized(),同时会传递 事件对象 * 6.程序员可以通过 ServletContextEvent 事件对象,来获取需要的信息,然后再进行业务处理 * 7.Tomcat怎么知道这个监听器存在呢? 因为我们需要在web.xml文件中进行配置, * 一旦配置后,tomcat启动后就会反射实例化该监听器,放到容器里面去管理 */ public class MyServletContextListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent servletContextEvent) { ServletContext servletContext = servletContextEvent.getServletContext(); System.out.println("MyServletContextListener监听到=" + servletContext + "被创建..."); //如果我们获取到ServletContext对象..可以进行业务处理 } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { ServletContext servletContext = servletContextEvent.getServletContext(); System.out.println("MyServletContextListener监听到=" + servletContext + "被销毁..."); //比如可以对ServletContext 数据进行处理,或者日志的管理... System.out.println("进行处理工作..."); } }
-
配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!--配置监听器--> <listener> <listener-class>com.listener.MyServletContextListener</listener-class> </listener> </web-app>
-
配置Tomcat
-
点击启动tomcat时,我们可以看到监听器被触发了:
-
点击停止tomcat时,可以看到监听器再一次被触发:
2.2ServletContextAttributeListener监听器
- 作用:监听ServletContext属性的变化
- 相关方法:
- void attributeAdded(ServletContextAttributeEvent event):添加属性时调用
- void attributeReplaced(ServletContextAttributeEvent event):替换属性时调用
- void attributeRemoved(ServletContextAttributeEvent event):移除属性时调用
应用实例
- 创建监听器:MyServletContextAttributeListener
package com.listener;
import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
public cl