7、Listener

Listener

监听器,是JavaWeb三大组件之一,用于监听JavaWeb程序中的事件,例如创建、修改、删除Session、request、context等,并触发响应事件

八种监听器

不同功能的监听器,需要实现不同的Listener接口,一个监听器也可以实现多个Listener接口,实现不同的功能

监听器分类 监听器名称 作用
ServletContext监听 ServletContextListener 用于对ServletContext对象进行监听(创建、销毁)
ServletContext监听 ServletContextAttributeListener 对ServletContext对象中属性的监听(增删改)
Session监听 HttpSessionListener 对Session对象的整体状态的监听(创建、销毁)
Session监听 HttpSessionAttributeListener 对Session对象中的属性监听(增删改)
Session监听 HttpSessionBindingListener 监听对象于Session的绑定和解除
Session监听 HttpSessionActivationListener 对Session数据的钝化和活化的监听
Request监听 ServletRequestListener 对Request对象进行监听(创建、销毁)
Request监听 ServletRequestAttributeListener 对Request对象中属性的监听(增删改)

使用

1、实现对应功能的接口

package top.ygang.listener;

import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class MyListener implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {

    }
}

2、配置Listener

在web.xml文件中配置

<listener>
    <listener-class>top.ygang.listener.MyListener</listener-class>
</listener>

使用注解

@WebListener

使用场景

监控网站登录人数

@WebListener
public class MyListener implements HttpSessionAttributeListener,HttpSessionListener{
    //监控网站新增登录
    @Override
    public void attributeAdded(HttpSessionBindingEvent se) {
        ServletContext servletContext = se.getSession().getServletContext();
        Integer loginCount = (Integer) servletContext.getAttribute("loginCount");
        if (loginCount == null){
            servletContext.setAttribute("loginCount",1);
        }else {
            servletContext.setAttribute("loginCount",loginCount + 1);
        }
    }
    //监控网站退出登录
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        ServletContext servletContext = se.getSession().getServletContext();
        Integer loginCount = (Integer) servletContext.getAttribute("loginCount");
        servletContext.setAttribute("loginCount",loginCount - 1);
    }
}