监听器

时间:2019-10-10
本文章向大家介绍监听器,主要包括监听器使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1、监听域对象创建与销毁的监听器:

举例:ServletContextListener 

(1)编写一个监听器去实现相应的接口并覆盖相应的方法:

package pers.zhb.test;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class ServletContextListenerDemo implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
      System.out.println("监听器创建了");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
      System.out.println("监听器销毁了");
    }
}

监听ServletContext域对象的创建与销毁:实现ServletContextListener 接口

监听HttpSession域对象的创建与销毁:实现HttpSessionListener 接口(在Session被创建的时候监听器被创建)

监听ServletRequest域对象的创建与销毁:实现ServletRequesttListener 接口

监听ServletContext域对象属性:实现ServletContextAttributeListener 接口

监听HttpSession域对象属性:实现HttpSessionAttributeListener 接口

监听ServletRequest域对象属性:实现ServletRequestAttributetListener 接口

(2)在web.xml文件中配置:

 <listener>
        <listener-class>pers.zhb.test.ServletContextListenerDemo</listener-class>
    </listener>

即类的全路径。

(3)ServletContextListener 生命周期:服务器开启的时候创建,服务器关闭的时候销毁。

2、监听三大域对象的属性变化:

(1)创建Servlet对ServletContext的属性进行设置:

 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        context.setAttribute("name", "zhai");//添加
        context.setAttribute("name", "zhang");//修改
        context.removeAttribute("name");//删除
    }

(2)创建监听器检测属性的变化:

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
public class ServletContextAttributeListenerDemo implements ServletContextAttributeListener {
    @Override
    public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {
        System.out.print("添加:"+servletContextAttributeEvent.getName());
        System.out.println(servletContextAttributeEvent.getValue());
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {
        System.out.print("删除:"+servletContextAttributeEvent.getName());
        System.out.println(servletContextAttributeEvent.getValue());
    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {
        System.out.print("修改"+servletContextAttributeEvent.getName());
        System.out.println(servletContextAttributeEvent.getValue());
    }
}

(3)配置文件:

<listener>
        <listener-class>pers.zhb.test.ServletContextAttributeListenerDemo</listener-class>
    </listener>
    <servlet>
        <servlet-name>ServletContextAttributeListenerServlet</servlet-name>
        <servlet-class>pers.zhb.test.ServletContextAttributeListenerServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletContextAttributeListenerServlet</servlet-name>
        <url-pattern>/abc</url-pattern>
    </servlet-mapping>

4、被监听的对象的获取:

public class ServletContextListenerDemo implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        ServletContext servletContext=servletContextEvent.getServletContext();
        Object servletContext1=servletContextEvent.getSource();
    }

第一种方法不需要强制转换。

原文地址:https://www.cnblogs.com/zhai1997/p/11650302.html