监听器

监听器:专门用于对其对象身上发生的事件或状态改变进行监听和处理的对象,当被监听的对象发生状况时,立即采取响应的行动。
Servlet监听器:Servlet规范中定义的一种特殊类,用于监听web应用程序中的ServletContext,HttpSession和ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。
按监听的事件类型Servlet监听器可分三种:

  1. 监听域对象自身的创建和销毁的事件监听器
  2. 监听域对象中的属性的增加和删除的事件监听器
  3. 监听绑定到域中的某个对象的状态的事件监听器

某些Servlet事件监听需要在web.xml文件中进行注册,一个web.xml文件中可以注册多个Servlet事件监听器,web服务器按照它们在web.xml文件中注册的顺序来加载和注册这些Servlet事件监听器。

 <!-- 配置Listener -->  
  <listener>   	
  	<listenerclass>com.zzz.listener.MyServletContextListener</listener-class>
  </listener>
  <listener>   	
  	<listener-class>com.zzz.listener.MyHttpSessionListener</listener-class> 
  </listener>
  <listener>   	
  	<listener-class>com.zzz.listener.MyServletRequestListener</listener-class> 
  </listener>

Servlet事件监听器的注册和调用过程都是由web容器自动完成。
一个web应用程序只会为每个事件监听器创建一个对象,有可能出现多个线程同时调用同一个监听器对象,所以在编写监听器类时,应考虑多线程安全的问题。

监听域对象的创建和销毁
域对象创建和销毁的事件监听器就是用来监听ServletContext、HttpSession、ServletRequest三个对象的创建和销毁事件的监听器。
销毁和创建的时机
在这里插入图片描述

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

public class MyServletRequestListener implements ServletRequestListener {

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

  	@Overri de
	public void requestInitialized(ServletRequestEvent arg0) {
		System.out.println("请求被创建");
    	}
    }

HttpSessionListener接口
HttpSessionListener接口用于监听HttpSession对象的创建和销毁。

public class MyHttpSessionListener implements HttpSessionListener {

	@Override
	public void sessionCreated(HttpSessionEvent arg0) {
	System.out.println("Session创建");
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent arg0) {
		System.out.println("Session销毁");
	}
}

ServletContextListener接口
ServletContextListener接口用于监听ServletContext对象的创建和销毁

public class MyServletContextListener implements ServletContextListener {

	//ServletContext对象被创建
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		System.out.println("ServletConttext销毁。。。");
	}

	//ServletContext对象被销毁
	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		System.out.println("ServletConttext创建。。。");
	}
}

域对象中属性的变更的事件监听器
域对象属性变更的事件监听器就是用来监听Servlet Context、HttpSession、ServletRequest这三个对象中的属性变更信息事件的监听器。

三个监听器的接口:

ServletContextAttributeListener
HttpSessionAttributeListener
ServletRequestAttributeListener

三个接口中都定义了三个方法来处理被监听对象中的属性的增加、删除和替换事件,同一个事件在这三个接口对应的方法名称完全相同,只是接收的参数类型不同。

public class MyHttpSessionAttributeListener implements HttpSessionAttributeListener {
	// 添加
	@Override
	public void attributeAdded(HttpSessionBindingEvent event) {
		System.out.println("添加属性"+event.getName()+"---"+event.getValue());
	}
	//  移除
	@Override
	public void attributeRemoved(HttpSessionBindingEvent event) {
		System.out.println("移除属性"+event.getName()+"---"+event.getValue());
	}

	// 替换   session.setAttribute("user","zhangsan");  
	@Override
	public void attributeReplaced(HttpSessionBindingEvent event) {
		System.out.println("替换属性"+event.getName()+"---"+event.getValue());
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值