JavaWeb进阶篇:监听器

「这是我参与2022首次更文挑战的第25天,活动详情查看:2022首次更文挑战」。

哈喽大家好,我是阿Q!今天就给大家来简单总结下监听器的相关知识。

什么是监听器?

监听器就是监听某个对象的状态变化的组件

概念介绍

  • 事件源:被监听的对象  ----- 三个域对象 request、session、servletContext
  • 监听器:监听事件源对象,事件源对象的状态的变化都会触发监听器 ---- 6+2 个(后边介绍)
  • 注册监听器:将监听器与事件源进行绑定
  • 响应行为:监听器监听到事件源的状态变化时,所涉及的功能代码 ---- 程序员编写代码

监听器分类(6种)

  1. 按照被监听的对象划分:ServletRequest域、HttpSession域、ServletContext域
  2. 按照监听的内容划分:监听域对象的创建与销毁的、监听域对象的属性变化的

监听器分类.png

监听器的编写步骤(重点)

(1)编写一个监听器类去实现监听器接口 2.png (2)覆盖监听器的方法

3.png

4.png

(3)需要在web.xml中进行配置---注册

5.png

ServletContextListener监听器的作用:

  • 初始化的工作:初始化对象,初始化数据 ---- 加载数据库驱动,连接池的初始化
  • 加载一些初始化的配置文件 --- spring的配置文件
  • 任务调度----定时器----Timer/TimerTask

例如:

//定时器
Timer timer = new Timer();
//执行的任务;开始时间;间隔时间;
timer.schedule(new TimerTask(){
    @Override
    public void run(){
        System.out.println("执行任务。。。");
    }
},new Date(),5000);
复制代码

属性监听器中的方法

public void attributeReplaced(ServletContextAttributeEvent scab){
    //是获得修改前的属性名与值
    scab.getName();
    scab.getValue();
}
复制代码

与session中的绑定的对象相关的监听器(对象感知监听器不需要配置)(2种)

即将要被绑定到session中的对象有几种状态?

  • 绑定状态:就一个对象被放到session域中
  • 解绑状态:就是这个对象从session域中移除了
  • 钝化状态:是将session内存中的对象持久化(序列化)到磁盘
  • 活化状态:就是将磁盘上的对象再次恢复到session内存中

绑定与解绑的监听器 HttpSessionBindingListener

6.png

钝化与活化的监听器 HttpSessionActivationListener(对服务器进行优化)

7.png

服务器关闭钝化,服务器再次开启活化,前提是必须实现 Serializable 接口

可以通过配置文件指定对象钝化时间 --- 对象多长时间不用被钝化:在META-INF下创建一个context.xml,将下列代码复制:

<Context>
 <!-- maxIdleSwap:session中的对象多长时间不使用就钝化单位分钟 -->
 <!-- directory:钝化后的对象的文件写到磁盘的哪个目录下,配置钝化的对象文件在work/catalina/localhost/钝化文件 -->
    <Manager className="org.apache.catalina.session.PersistentManager"  maxIdleSwap="1">
        <Store className="org.apache.catalina.session.FileStore" directory="itcast205" />
    </Manager>
</Context>

复制代码

题外篇

阿Q将持续更新java实战方面的文章,感兴趣的可以关注下公众号:阿Q说代码,也可以来技术群讨论问题呦,点赞之交值得深交!

おすすめ

転載: juejin.im/post/7068076325797363726