监听器

1. 基本概念

web监听器是Servlet规范中定义的一种特殊类

监听器就是能监听某个对象的状态变化的组件,是用来监听域对象的变化的
每当Tomcat创建或销毁三大域对象,都会被这些监听器察觉,然后它们会做相应的操作(调用自身的特定方法)

6个常规监听器,分属三类,分别对应JavaWeb三大域对象(除去JSP的Page域):ServletContext、HttpSession、ServletRequest。共三对,每一对都包括1个生命周期监听和1个属性监听

还有两个感知监听器

使用的时候实现相应的接口然后配置即可

6个常规监听器
    |---ServletContext
            |---ServletContextListener(生命周期监听)
            |---ServletContextAttributeListener(属性监听)
    |---HttpSession
            |---HttpSessionListener(生命周期监听)
            |---HttpSessionAttributeListener(属性监听)
    |---ServletRequest
            |---ServletRequestListener(生命周期监听)
            |---ServletRequestAttributeListener(属性监听)

2个感知监听
    |---HttpSessionBindingListener
    |---HttpSessionActivationListener
  • 生命监听器:所谓生命周期监听器,就是监听三大域对象的创建和销毁。每当Tomcat创建或销毁三大域对象,都会被这些监听器察觉,然后它们会做相应的操作(调用自身的特定方法)

  • 属性监听器:属性监听器则专门监听三大域对象get/setAttribute()。每当我们给域对象设置值或者从里面取值,都会被它们监听到,然后还是触发它们特定的方法

在这里插入图片描述

2. 八大监听器详解(只写几个,其实使用都一样)

2.1 ServletContextListener生命周期监听器

用来监听ServletContext域的创建与销毁,ServletContext域在服务器启动时创建,在服务器关闭时销毁

使用场景

  • 初始化的工作:初始化对象 初始化数据 加载数据库驱动 连接池的初始化

  • 加载一些初始化的配置文件

  • 任务调度

使用
编写一个监听器类去实现监听器接口,并覆盖监听器方法
参数是ServletContentEvent对象。可以通过它获取SeveletContext,当然也就可以对域对象get和set数据
在这里插入图片描述
在web.xml中进行配置
在这里插入图片描述
在Servlet3.0中,监听器的配置可以直接在代码中通过注释来完成,无需在web.xml中再配置(下面介绍)

2.2 HttpSessionListener

监听HttpSession域的创建与销毁,HttpSession在第一次调用request.getSession时创建,在服务器关闭 或session过期或手动销毁时销毁

使用场景
用监听器统计网站访问人数,记录访问日志

每当有一个访问连接到服务器时,服务器就会创建一个session来管理会话。那么我们就可以通过统计session的数量来获得当前在线人数

同样的参数是ServleSesionEvent对象。可以通过它获取Session域对象,当然也就可以对域对象get和set数据

@WebListener   //在此注明以下类是监听器 监听器的配置注释来完成
public class onLineCount implements HttpSessionListener {

    public int count=0;
    public void sessionCreated(HttpSessionEvent arg0) {
        count++;
        arg0.getSession().getServletContext().setAttribute("Count", count);

    }

    @Override
    public void sessionDestroyed(HttpSessionEvent arg0) {
        count--;
        arg0.getSession().getServletContext().setAttribute("Count", count);
    }
}
//在显示在线人数处通过session.getAttribute("Count")即可获取在线人数值。

2.3 ServletRequestListener

监听ServletRequest域创建与销毁的监听器,每一次请求都会创建request,请求结束销毁

2.4 监听域对象中的属性的增加和删除的事件监听器

在这里插入图片描述

25 监听绑定到HttpSession域中的某个对象的状态的事件监听对象

  • 绑定:通过Session.setAttribute()将对象保存到Session域中

  • 解除绑定:removeAttribute

  • 钝化:将Sessin中的对象持久化存储到硬盘

  • 活化:将Session对象从一个持久化设备进行恢复

Session的钝化机制
在这里插入图片描述
默认由org.apache.catalina.session.StandardManger管理
1.当Tomcat服务器被关闭或重启时,tomcat服务器会将当前内存中的Session对象钝化

2.Web应用程序被重新加载时,内存中的Session对象也会被钝化

3.钝化后端文件被保存在:Tomcat安装路径/work/Catalina/hostname/applicationname/SESSION.ser中(活化后文件消失)

由org.apache.catalina.session.Persistentmanager管理
1.在钝化的基础上进行了扩张。可以配置主流内存的Session对象数目,将不常使用的Session对象保存到文件系统或数据库,当用时再重新加载

2.默认情况下,Tomcat提供两个钝化驱动类,org.apache.Catalina.FileStore和org.apache.Cataline.JDBCStore

Servlet规范

HttpSessionBindingListener

  • 绑定:valueBound方法
  • 解除绑定:valueUnbound方法

HttpSessionActivationListener

  • 钝化:sessionWillPassivate方法
  • 活化:sessionDidActivate方法

注意:我们创建的并不是监听器,而是对普通的javaBean实现相应的接口,因为钝化,,活化,绑定,解除绑定所说的都是这个对象的状态,所以我们要监听的实际上只是这个对象(而且不需要在xml文件中配置,只要被放到了session域中就有效果)

在这里插入图片描述

3. ContextLoaderListener解析

TODOContextLoaderListener解析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值