Listener监听器

介绍

Listener 是 JavaEE 规范之一,是JAVA接口

Listener 就 JavaWeb 三大组件之一。另外2个是:Servlet、Filter 过滤器

注意

访问 .html 等静态资源,不会创建 session

访问 jsp、servlet 时,才会创建 session

监听器

ServletContext相关监听器

  • ServletContextListener:监听 ServletContext 对象的创建和销毁
  • ServletContextAttributeListener:监听 ServletContext 对象 属性的添加、删除和修改

HttpSession相关监听器:

  • HttpSessionListener:监听 session 的创建和销毁
  • HttpSessionAttributeListener:监听 session 属性的添加、删除和修改
  • HttpSessionActivationListener:监听 session 的 active 和 passivate 情况
  • HttpSessionBindingListener

ServletRequest相关监听器:

  • ServletRequestListener:监听 HttpServletRequest 对象的创建和销毁
  • ServletRequestAttributeListener 监听 HttpServletRequest 对象 属性的添加、删除和修改

ServletContextListener、HttpSessionListener 较为常用

应用场景

  • ServletContextListener:spring框架通过此监听器进行系统初始化

  • HttpSessionListener:统计网站在线人数

实现方式

  • 实现 相应监听器 接口,实现 相应的 方法

配置

  • 配置 web.xml 中
  • 注解(新方式)

例子

实现在线人数

import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

@WebListener
public class SessionListener implements HttpSessionListener{

    int count=0;

    /**
     * 当有session创建,那么就执行该方法
     */
    @Override
    public void sessionCreated(HttpSessionEvent arg0) {
        count++;
        //获取创建的session对象
        HttpSession session=arg0.getSession();
        System.out.println(session.getId());
    }
    /**
     * 当有session销毁时,执行该方法
     */
    @Override
    public void sessionDestroyed(HttpSessionEvent arg0) {
        count--;
        //获取 销毁的session对象
        HttpSession session=arg0.getSession();
        System.out.println(session.getId());
    }

}

例子:配置方式

java

@WebListener
public class ServletContextListenerImpl implements ServletContextListener {

    public ServletContextListenerImpl(){
        System.out.println("ServletContextListenerImpl构造方法");
    }
    //在 ServletContext 对象创建时,调用该方法
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("创建ServletContext对象");
    }
    //在 ServletContext 对象销毁时,调用该方法
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("销毁ServletContext对象");
    }
}

配置web.xml

<listener>
    <listener-class>top.malaoshi.ServletContextListenerImpl</listener-class>
</listener>

例子:注解方式

@WebListener
public class ServletContextListenerImpl implements ServletContextListener {

    public ServletContextListenerImpl(){
        System.out.println("ServletContextListenerImpl构造方法");
    }

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("创建ServletContext对象");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("销毁ServletContext对象");
    }
}

原文出处:/show_1IXs9WrBw4o.html