Listener(监听器)

1.什么是监听器?
2.监听器的分类
3.监听ServletContext对象的销毁和创建
4.监听ServletRequest对象的销毁和创建

#什么是监听器?
在servlet中监听器是实现特定接口的类,当监听器绑定的类发生改变时,监听器会做出反应,举个简单的例子,水壶烧水
1.水壶(事件源)
2.水壶里面的温度开关(事件监听器)
3.水烧开了(事件对象)
4.温度开关切断电源(响应行为)

#监听器的分类
按监听的对象可分为3类
ServletContext对象,监听器为ServletContextListener
HttpSession对象,监听器为HttpSessionListener
ServletRequest对象,监听器为ServletRequestListener

按监听的内容可分为2类

ServletContext对象 HttpSession对象 ServletRequest对象
域对象的销毁域创建 ServletContextListener HttpSessionListener ServletRequestListener
域对象内的属性发生改变 ServletContextAttributeListener HttpSessionAttributeListener ServletRequestAttributeListener

#监听ServletContext对象的销毁和创建
实现ServletContextListener接口

package com.mike;

import javax.servlet.ServletContextListener;
import javax.servlet.ServletContextEvent;

/**
 * @author mike
 * @date 2020-11-21
 * @desc 监听ServletContext域的创建和销毁
 */
public class MyServletContextListener implements ServletContextListener {
	@Override
	public void contextInitialized(ServletContextEvent servletContextEvent) {
		System.out.println("ServletContext对象创建");
	}

	@Override
	public void contextDestroyed(ServletContextEvent servletContextEvent) {
		System.out.println("ServletContext对象销毁");
	}
}

注册监听器

 <listener>
        <description>ServletContextListener监听器</description>
        <listener-class>com.mike.MyServletContextListener</listener-class>
    </listener>

启动tomacat服务器会输出 "ServletContext对象创建",因为ServletContext对象是在容器启动创建
关闭tomacat服务器会输出 "ServletContext对象销毁",因为ServletContext对象在容器关闭时销毁

#监听ServletRequest对象的销毁和创建
实现ServletRequestListener接口

package com.mike;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;

/**
 * @author mike
 * @date 2020-11-21
 * @desc 监听ServletRequest域创建和销毁
 */

@WebListener //在此使用@WebListener注解注册监听器,就不需要在web.xml注册了
public class MyServletRequestListener implements ServletRequestListener{
	@Override
	public void requestInitialized(ServletRequestEvent servletRequestEvent) {
		System.out.println("请求创建了");
	}

	@Override
	public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
		System.out.println("请求销毁了");
	}
}

随便访问一个servlet查看结果
当请求被创建时输出"请求创建了",当请求完成后被销毁输出"请求销毁了",每一次请求都会被监听

原文地址:https://www.cnblogs.com/gy1010/p/14016771.html