JAVA EE(八)—— 监听器 Listener

一、监听器 Listener概述

1、监听器 Listener介绍

(1)介绍

  • Servlet监听器是Servlet规范中定义的一种特殊类,用于监听ServletContext、HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中属性发生修改的事件。
  • 监听器监听的内容主要为对象的创建和销毁、属性的改变等事件,在事件发生之前和之后进行一些处理。
  • 监听器是 JAVA EE 三大组件之一,用于监听服务器的某些特殊动作,当服务器执行这些动作时,监听器中的方法会自动执行,不需要手动调用。

(2)作用
监听作用域对象request. session. application的创建、销毁和内容的改变

(3)监听器配置文件

<listener>
	<listener-class></listener-class>
</listener>
  • listener-class:监听器类的路径

二、监听器示例

1、常见监听器

(1)ServletRequestListener监听器
监听request对象的创建和销毁

  • 实现:ServletRequestListener接口
  • 重写:requestInitialized(ServletRequestEvent sre) //创建
  • 重写:requestDestroyed(ServletRequestEvent sre) //销毁
public class ServletRequestListenerDemo implements ServletRequestListener {

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        System.out.println("初始化");
    }

    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        System.out.println("销毁");
    }
}

通过形参sre可以获取到监听的request对象

sre.getServletRequest();

(2)HttpSessionAttributeListener监听器
监听request的作用域的数据的变更

  • 实现:ServletRequestAttributeListener 接口
  • 重写:attributeAdded(ServletRequestAttributeEvent srae)
  • 重写:attributeRemoved(ServletRequestAttributeEvent srae)
  • 重写:attributeReplaced(ServletRequestAttributeEvent srae)
public class ServletRequestAttributeListenerDemo implements ServletRequestAttributeListener {
    
    @Override
    public void attributeAdded(ServletRequestAttributeEvent srae) {
        System.out.println("新增");
    }

    @Override
    public void attributeRemoved(ServletRequestAttributeEvent srae) {
        System.out.println("移除");
    }

    @Override
    public void attributeReplaced(ServletRequestAttributeEvent srae) {
        System.out.println("替换");
    }
}

通过形参srae可以获取到监听的数据的键值对信息

srae.getName();
srae.getValue();

(3)HttpSessionListener 监听器
监听session的创建和销毁,当服务器中产生新的 HttpSession 对象以及 HttpSession 失效时,HttpSessionListener 中的方法将会自动执行

  • 实现:HttpSessionListener 接口
  • 重写:sessionCreated(HttpSessionEvent event)
  • 重写:sessionDestroyed(HttpSessionEvent event)
	@WebListener
	public class HttpSessionListenerDemo implements HttpSessionListener{
		
		@Override
		public void sessionCreated(HttpSessionEvent event) {
			System.out.println("监听session的创建");
		}
		
		@Override
		public void sessionDestroyed(HttpSessionEvent event) {
			System.out.println("监听session的销毁");
		}
	}

通过形参event可以获取到监听的session对象

event.getSession();

(4)HttpSessionSttributeListener 监听器
监听session中的数据变更,当Session对象中新增了数据、修改了数据、删除了数据时,这个监听器的方法将会自动执行。

  • 实现:HttpSessionAttributeListener 接口
  • 重写:attributeAdded(HttpSessionBindingEvent event)
  • 重写:attributeRemoved(HttpSessionBindingEvent event)
  • 重写:attributeReplaced(HttpSessionBindingEvent event)
public class AttributeListenerDemo implements HttpSessionAttributeListener{
	
	@Override
	public void attributeAdded(HttpSessionBindingEvent event) {	//新增方法
		System.out.println("session中新增了数据:" + event.getValue());
	}
	
	@Override
	public void attributeRemoved(HttpSessionBindingEvent event) {	//移除方法
		System.out.println("session中移除了数据:" + event.getValue());
	}
	
	@Override
	public void attributeReplaced(HttpSessionBindingEvent event) {	//修改方法
		System.out.println("session中替换了数据:" + event.getValue());
	}
}

通过形参event可以获取到监听的session的数据

event.getName();
event.getValue();

(5)ServletContextListener 监听器
监听application,当ServletContext 对象被创建和销毁的时候,ServletContextListener 中的方法将会自动执行。

  • 实现:ServletContextListener 接口
  • 重写:contextDestroyed(ServletContextEvent event)
  • 重写:contextInitialized(ServletContextEvent event)
	public class ServletContextListenerDemo implements ServletContextListener{
		
		@Override
		public void contextInitialized(ServletContextEvent sre) {
			System.out.println("有新的ServletContext 对象被创建");
		}
	
		@Override
		public void contextDestroyed(ServletContextEvent sre) {
			System.out.println("有新的ServletContext 对象被销毁");
		}
	}	

通过形参event可以获取到监听的application的对象

sre.getServletContext();

(6)ServletContextAttributeListener监听器
监听application的数据的变更,如添加数据、删除数据、修改数据

  • 实现:ServletContextAttributeListener 接口
  • 重写:attributeAdded(ServletContextAttributeEvent scae)
  • 重写:attributeRemoved(ServletContextAttributeEvent scae)
  • 重写:attributeReplaced(ServletContextAttributeEvent scae)
public class ServletContextAttributeListenerDemo implements ServletContextAttributeListener {

    @Override
    public void attributeAdded(ServletContextAttributeEvent scae) {
        System.out.println("添加");
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent scae) {
        System.out.println("移除");
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent scae) {
        System.out.println("修改");
    }
}

通过形参scae可以获取到监听的application的数据

scae.getName();
scae.getValue();
发布了104 篇原创文章 · 获赞 58 · 访问量 7508

猜你喜欢

转载自blog.csdn.net/baidu_27414099/article/details/104440970