监听器Listener

Servlet 监听器时 Servlet 规范中定义的一种特殊类,用于监听 ServletContex、HttpSession 和 ServletRequest 等域对象的创建和销毁事件,以及监听这些域对象中属性修改的事件。

1 作用域监听器

Servlet 中定义了以下监听作用域对象的监听器接口:

监听器接口 描述
HttpSessionListener 用于监听session的创建和销毁
ServletContextListener 用于监听ServletContext的创建和销毁
ServletRequestListener 用于监听Request的创建和销毁

实现上述接口需要重写两个方法:

  • xxxDestroyed(xxxEvent):对象销毁时被调用
  • xxxInitialized(xxxEvent):对象创建时被调用

2 属性监听器

Servlet 还定义了各作用域对象中属性的监听器,用于监听属性的修改。

监听器接口 描述
HttpSessionAttributeListener 用于监听session中属性变化
ServletContextAttributeListener 用于监听ServletContext中属性变化
ServletRequestAttributeListener 用于监听request中属性变化

实现上述接口需要重写以下三个方法:

  • attributeAdded(xxxEvent):属性添加时被调用
  • attributeRemoved(xxxEvent):属性删除时被调用
  • attributeReplaced(xxxEvent):属性值修改时被调用

3 监听器的使用

  1. 创建一个类并实现上述接口,并重写方法;

    package servlet;
    
    import javax.servlet.*;
    
    public class Listener implements ServletRequestListener{
        @Override
        public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
            System.out.println("Request被销毁");
        }
    
        @Override
        public void requestInitialized(ServletRequestEvent servletRequestEvent) {
            System.out.println("Request初始化");
        }
    }
    
  2. 在 web.xml 文件中配置 Listener 信息;或者在创建类时使用注解;

    
     servlet.Listener
    
    
    import javax.servlet.*;
    
    @WebListener()
    public class Listener implements ServletRequestListener{
     @override
     public void requestDestroyed(servletRequestEvent servletRequestEvent){
     
     }
    }
    

4 监听Session内的对象

Servelt 中还存在两个监听器,用于监听 Session 中对象。

监听器接口 描述
HttpSessionBindingListener 用于监听JavaBean对象是否绑定或删除
HttpSessionActivationListener 用于监听JavaBean对象钝化或活化

钝化:当服务器关闭时,将Session的内容保存在硬盘上;

活化:当服务器开启时,会将Session的内容从硬盘中重新加载;

要测试 Session 的钝化和活化,需要修改 Tomcat 的配置:在 META-INF 下的 context.xml 文件中添加以下代码


    
        
    

参考文章

  • java3y - GitHub
    可关注大佬微信公众号:java3y

你可能感兴趣的:(监听器Listener)