博客
关于我
Listener监听器
阅读量:791 次
发布时间:2023-02-05

本文共 2471 字,大约阅读时间需要 8 分钟。

监听器的概念与应用

一、监听器的概念

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

监听对象包括:

  • ServletContext(application):整个应用只存在一个。
  • HttpSession(session):针对每一个对话。
  • ServletRequest(request):针对每一个客户请求。
  • 监听内容包括:创建、销毁、属性改变事件。

    监听作用:可以在事件发生前、发生后进行一些处理,一般用于统计在线人数和在线用户、统计网站访问量、系统启动时初始化信息等。

    二、监听器的基本使用

    创建步骤:

  • 创建一个实现监听器接口的类。
  • 配置web.xml文件,注册监听器。
  • 监听器的启动顺序:按照web.xml的配置顺序来启动。

    加载顺序:监听器>过滤器>Servlet。

    说明:web.xml的加载顺序是:【Context-Param】→【Listener】→【Filter】→【Servlet】,而同个类型之间的实际程序调用时的顺序是根据对应的Mapping的顺序进行调用。

    三、常用监听器

    1. ServletContextListener 与 ServletContextAttributeListener

    • ServletContextListener:在web应用服务器关闭时触发contextDestroyed事件,在服务器启动时触发contextInitialized事件。
    • ServletContextAttributeListener:监听ServletContext作用域范围内属性的添加、移除和替换事件。

    2. ServletRequestListener 与 ServletRequestAttributeListener

    • ServletRequestListener:在Request作用域范围内,添加、移除和替换属性时触发相应事件。
    • ServletRequestAttributeListener:同上,主要用于Request域的属性事件处理。

    3. HttpSessionListener 与 HttpSessionAttributeListener

    • HttpSessionListener:在HttpSession创建和销毁时触发相应事件。
    • HttpSessionAttributeListener:在HttpSession的属性添加、移除和替换事件中触发相应方法。

    四、小demo:访问量统计

    public class VisitListener implements HttpSessionListener,ServletContextListener {    @Override    public void sessionCreated(HttpSessionEvent arg0) {        ServletContext application = arg0.getSession().getServletContext();        synchronized (application) {            int visit = (Integer) application.getAttribute("visit");            visit++;            application.setAttribute("visit", visit);        }    }    @Override    public void contextInitialized(ServletContextEvent arg0) {        final ServletContext application = arg0.getServletContext();        application.setAttribute("visit", 0);                // 定时器设置        Calendar date = Calendar.getInstance();        date.add(Calendar.MINUTE, 1);        new Timer().schedule(new TimerTask() {            @Override            public void run() {                int visit = (Integer) application.getAttribute("visit");                System.out.println("当天总的访问量:" + visit);                application.setAttribute("visit", 0); // 开始统计下一天            }        }, date.getTime(), 24*60*60*1000);    }    @Override    public void sessionDestroyed(HttpSessionEvent arg0) {        // 不做处理    }    @Override    public void contextDestroyed(ServletContextEvent arg0) {        // 不做处理    }}

    首页

    当前网站的访问量有:${applicationScope.visit }

    浏览器访问效果展示

    通过上述监听器,实现了网站访问量的实时统计和每日统计功能。

    通过定时任务每天重置访问量计数器,并在每日结束时打印当天的访问量统计。

    参考文章

    (未提供具体参考文章)

    转载地址:http://azufk.baihongyu.com/

    你可能感兴趣的文章
    listbox相互传值
    查看>>
    Listener监听器
    查看>>
    ListUtil常用操作
    查看>>
    Listview 利用Datapager进行分页
    查看>>
    ListView 的图片下载,优化造成的跳变
    查看>>
    Listview加载不同布局
    查看>>
    listview数据刷新后自动滑到底部
    查看>>
    List中new ArrayList和null有什么区别
    查看>>
    list之按照中文拼音首字母排序
    查看>>
    List内存分配
    查看>>
    List分批处理
    查看>>
    List去重工具类
    查看>>
    List去除重复数据的五种方式
    查看>>
    list循环删除元素中的坑
    查看>>
    List数据集动态排序
    查看>>
    list深拷贝和浅拷贝
    查看>>
    List集合排序找出其中的最大和最小值
    查看>>
    list<Map> 怎么转list<String>
    查看>>
    2025年04月10日IT技术领域重点关注焦点
    查看>>
    List<String>用空串替换null值,并且都加上单引号,并且转为字符串用,分割
    查看>>