javaWeb 学习日记(15)------ listener

简介

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

Servlet 监听器的分类

按监听的事件类型Servlet监听器可分为如下三种类型:

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



监听域对象的创建和销毁

域对象创建和销毀的事件监听器就是用来监听ServletContext, HttpSession, HttpServletRequest 这三个对象的创建和销毁事件的监听器。

在这里插入图片描述



监听域对象自身的创建和销毁的事件监听器

  • ServletContextListener
  • ServletRequestListener‘
  • HttpSessionListener
public class HelloServletContextListener implements ServletContextListener, ServletRequestListener,HttpSessionListener {
 @Override
 public void contextInitialized(ServletContextEvent sce) {
  System.out.println("ServletContextListener 被创建");
 }
 
 @Override
 public void contextDestroyed(ServletContextEvent sce) {
  System.out.println("ServletContextListener 被销毁");
 }

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

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

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

web.xml 文件中的配置

 <listener>
  <listener-class>com.athome.listener.HelloServletContextListener</listener-class>
 </listener>

在这里插入图片描述


监听域对象中的属性的增加和删除的事件监听器

域对象中属性的变更的事件监听器就是用来监听ServletContext, HttpSession, HttpServletRequest这三个对象中的属性变更信息事件的监听器。

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

  • ServletRequestAttributeListener
  • HttpSessionAttributeListener
  • ServletContextAttributeListener
public class AttributeListener implements ServletRequestAttributeListener,
   HttpSessionAttributeListener,ServletContextAttributeListener{
   
 @Override
 public void attributeAdded(ServletContextAttributeEvent scae) {
  System.out.println("Context 属性被添加: " + scae.getName() + "-->" + scae.getValue());

 @Override
 public void attributeRemoved(ServletContextAttributeEvent scae) {
  System.out.println("Context 属性被替换: " + scae.getName() + "-->" + scae.getValue());
 }

 @Override
 public void attributeReplaced(ServletContextAttributeEvent scae) {
  System.out.println("Context 属性被移除: " + scae.getName() + "-->" + scae.getValue());
 }

 @Override
 public void attributeAdded(HttpSessionBindingEvent se) {
  System.out.println("session 属性被添加: " + se.getName() + "-->" + se.getValue());
 }
 
 @Override
 public void attributeRemoved(HttpSessionBindingEvent se) {
  System.out.println("session 属性被移除: " + se.getName() + "-->" + se.getValue());
 }
 
 @Override
 public void attributeReplaced(HttpSessionBindingEvent se) {
  System.out.println("session 属性被修改: " + se.getName() + "-->" + se.getValue());
 }

 @Override
 public void attributeAdded(ServletRequestAttributeEvent srae) {
  System.out.println("request 属性被添加: " + srae.getName() + "-->" + srae.getValue());
 }
 
 @Override
 public void attributeRemoved(ServletRequestAttributeEvent srae) {
  System.out.println("request 属性被移除: " + srae.getName() + "-->" + srae.getValue());
 }
 
 @Override
 public void attributeReplaced(ServletRequestAttributeEvent srae) {
  System.out.println("request 属性被替换: " + srae.getName() + "-->" + srae.getValue());
 }
 
 }

web.xml文件中的配置

 <listener>
  <listener-class>com.athome.listener.AttributeListener</listener-class>
 </listener>



监听绑定到HttpSession域中的某个对象的状态的事件监听器(不需要在 web.xml 中进行配置)

  • HttpSessionBindingListener
    实现 接口的 javaBean 类在session 操作改类时 调用对应的方法
public class Customer implements HttpSessionBindingListener{
 @Override
 public void valueBound(HttpSessionBindingEvent event) {
   System.out.println("绑定到 session 属性");
  Object value = event.getValue();
  System.out.println(value == this);
  System.out.println(event.getName());
 }
 
  @Override
 public void valueUnbound(HttpSessionBindingEvent event) {
  System.out.println("从session 中接触绑定");
 } 
}	
  • HttpSessionActivationListener
    实现该接口 和 Serializable 接口的类,在进行相关操作时会被访问
public class HttpsessionTest implements HttpSessionActivationListener,Serializable{
 /**
  * 
  */
 private static final long serialVersionUID = 1L;
 
 @Override
 public void sessionWillPassivate(HttpSessionEvent se) {
  //钝化
  System.out.println("向磁盘中写入 session 对象");
 }
 
 @Override
 public void sessionDidActivate(HttpSessionEvent se) {
  //活化
  System.out.println("从磁盘中读取 session 对象");
 }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值