Listener监听器

Servlet的监听器, 随web应用的启动而启动, 只初始化一次, 随web应用的停止而销毁. 用于监听ServletContext, HttpSession和ServletRequest等域对象的创建与销毁事件, 以及监听这些域对象中属性发生修改的事件.

监听范围

ServletContextListener 监听所有用户, 即应用
ServletSessionListener 监听每次会话
ServletRequestListener 监听每次请求

作用

统计在线人数
统计网站访问量
系统启动时的初始化信息

接口方法介绍

package javax.servlet;

import javax.servlet.ServletContextEvent;
import java.util.EventListener;

public interface ServletContextListener extends EventListener {

    /**
     * 接收Web应用程序初始化过程开始的通知
     * 在Web应用程序中的任何过滤器或servlet初始化之前, 所有Servlet上下文侦听器都会收到上下文初始化的通知
     */
    public void contextInitialized(ServletContextEvent sce);

    /**
     * 接收到关于Servlet上下文即将关闭的通知
     * 在任何Servlet上下文侦听器被通知上下文销毁之前,所有servlet和过滤器都将被销毁
     */
    public void contextDestroyed(ServletContextEvent sce);
}

web.xml配置

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

举例

可以通过自定义session扫描器, 监听当前在线人数

以下仅为简易demo

package com.liuzhihang.test;

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

/**
 * @author liuzhihang
 * @date 2018/4/11 17:37
 */
public class OnlineSessionListener implements HttpSessionListener {

    private static Long onlineUser = 0L;

    private static final String ALL_ONLINE_USER = "ALL_ONLINE_USER";

    @Override
    public void sessionCreated(HttpSessionEvent se) {

        ServletContext servletContext = se.getSession().getServletContext();
        onlineUser = (Long) servletContext.getAttribute(ALL_ONLINE_USER);
        servletContext.setAttribute(ALL_ONLINE_USER, ++onlineUser);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        ServletContext servletContext = se.getSession().getServletContext();
        onlineUser = (Long) servletContext.getAttribute(ALL_ONLINE_USER);
        servletContext.setAttribute(ALL_ONLINE_USER, --onlineUser);
    }
}

   版权声明

文章作者: liuzhihang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源!

评论
 上一篇
Transactional声明式事务 Transactional声明式事务
声明式事务管理建立在AOP之上的. 其本质是对方法前后进行拦截, 然后在目标方法开始之前创建或者加入一个事务, 在执行完目标方法之后根据执行情况提交或者回滚事务.
2018-01-27
下一篇 
整数包装类型的缓存 整数包装类型的缓存
部分包装类型存在缓存机制, 会在JVM启动时, 缓存一定数量的对象, 有助于节省内存, 提高性能.
2018-01-15
  目录