监听器 listener

简介

  • 作用: 监听ServletContext,HttpSession,ServletRequest的创建,销毁,以及属性发生改变
  • 监听器的分类,servlet定义了多种类型的监听器,用于监听的事件源分别是ServletContext,HttpSession,ServletRequest这三个域对象
    ,Servlet规范针对这三个对象的操作,又针对这三种对象的操作,又把多种类型的监听器分为三种类型。
      1. 监听域对象自身的创建和销毁的事件监听器。
      1. 监听域对象中的属性的增加和删除的事件监听器。
      1. 监听绑定到HttpSession域中的某个对象的状态的事件监听器。

监听ServletContext对象的创建和销毁

  • 可以通过实现 ServletContextListener 接口来对 ServletContext对象进行监听

    • ServletContext对象被创建时,会调用contextInitialized() 方法
    • ServletContext对象被销毁时,会调用contextDestroyed() 方法
  • 监听器代码

public class ServletContextListener implements javax.servlet.ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        //监听ServletContext被初始化
        //获取ServletContext对象
        ServletContext context = servletContextEvent.getServletContext();
        System.out.println("ServletContext对象被创建");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("ServletContext对象被销毁");
    }
}
  • 监听ServletContext属性的代码
public class ServletContextAttributeListener implements javax.servlet.ServletContextAttributeListener {

    @Override
    public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
        //当添加一个属性到ServletContext对象时
        String name = servletContextAttributeEvent.getName();
        Object value = servletContextAttributeEvent.getValue();
        System.out.println(name+"---add--->"+value);
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
        //当移除一个属性到ServletContext对象时
        String name = servletContextAttributeEvent.getName();
        Object value = servletContextAttributeEvent.getValue();
        System.out.println(name+"---remove--->"+value);
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
        //当修改一个属性到ServletContext对象时
        String name = servletContextAttributeEvent.getName();
        Object value = servletContextAttributeEvent.getValue();
        System.out.println(name+"---replace--->"+value);
    }
}
  • web.xml代码
<!--注册监听器-->
  <listener>
    <listener-class>cn.lzm.servlet.ServletContextListener</listener-class>
  </listener>
  <listener>
    <listener-class>cn.lzm.servlet.ServletContextAttributeListener</listener-class>
  </listener>

监听session对象的创建和销毁

  • 实现 HttpSessionListener 接口
  • 监听属性实现 HttpSessionAttributeListener,不做演示
public class SessionListener implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        HttpSession session = httpSessionEvent.getSession();
        System.out.println("创建session对象:"+session);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        HttpSession session = httpSessionEvent.getSession();
        System.out.println("销毁session对象:"+session);
    }
}
  • web.xml
 <listener>
    <listener-class>cn.lzm.servlet.SessionListener</listener-class>
  </listener>

监听Request对象的创建和销毁

  • 实现 ServletRequestListener
  • 监听属性实现 ServletRequestAttributeListener
  • 监听器代码
public class RequestListener implements ServletRequestListener {

    @Override
    public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
        ServletRequest servletRequest = servletRequestEvent.getServletRequest();
        System.out.println("创建了Servlet"+servletRequest.getClass());
    }

    @Override
    public void requestInitialized(ServletRequestEvent servletRequestEvent) {
        ServletRequest servletRequest = servletRequestEvent.getServletRequest();
        System.out.println("销毁了Servlet"+servletRequest.getClass());
    }
}
  • web.xml
<!--request监听器-->

  <listener>
    <listener-class>cn.lzm.servlet.RequestListener</listener-class>
  </listener>
posted @ 2021-02-10 13:23  阿肆啊  阅读(109)  评论(0)    收藏  举报