10、监听器介绍

什么是监听器

监听器就是一个实现了特定接口的java类,这个java类用于监听另一个java类的方法调用或者属性的改变。当被监听对象发生上述事件后,监听器某个方法将会立即执行。

监听器的用途

用来监听其他对象的变化,主要应用在图形界面的开发上。

监听器的术语

  • 事件源:被监听的对象。(汽车)
  • 监听器:监听的对象。(报警器)
  • 事件源和监听器绑定:在汽车上安装报警器
  • 事件:指的是事件源对象的改变(踹了汽车一脚)——主要功能获得事件源对象。

监听器的执行过程

在这里插入图片描述

Servlet中的监听器

  • 在Servlet中定义了多种类型的监听器,他们用于监听的事件源分别是ServletContext、HttpSession、ServletRequest这三个域对象。
  • Servlet中的监听器的分类
    • 一类:监听三个域对象的创建和销毁的监听器(三个);
    • 二类:监听三个域对象属性变更的监听器(三个);
    • 三类:监听HttpSession中JavaBean的状态的改变(钝化、活化、绑定、解除绑定)的监听器(两个)。

监听三个域对象的创建和销毁的监听器

  • ServletContextListener监听器的使用
    • 新建一个类实现ServletContextListener接口,重写contextInitialized()(监听ServletContext对象的创建)、contextDestroyed()(监听ServletContext对象的销毁)方法
    • 分析:事件源:ServletContext;监听器:新建的监听类;事件源和监听器的绑定:配置:
      在这里插入图片描述
    • ServletContextListener的企业用途:加载框架的配置文件;定时任务调度。
  • HttpSessionListener监听器的使用
    • 用来监听HttpSession对象的创建和销毁。
    • 新建一个类实现HttpSessionListener接口,重写sessionCreated()(监听HttpSession对象的创建)、sessionDestroyed()(监听HttpSession对象的销毁)方法,配置同上。
    • 访问html页面和Servlet不会创建Session对象,访问JSP页面会创建,因为JSP在被编译成Servlet时会默认调用getSession()方法,即Session对象被创建了,监听器的sessionCreated()方法执行了。
    • Session对象销毁:①过期(默认30分钟);②手动销毁;③服务器非正常关闭(正常关闭时Session会被系列化)。
  • ServletRequestListener监听器的使用
    • 用来监听ServletRequest对象的创建和销毁。
    • 新建一个类实现ServletRequestListener接口,重写requestInitialized()(监听ServletRequest对象的创建)、requuestDestroyed()(监听ServletRequest对象的销毁)方法,配置同上。
    • 访问html、JSP、Servlet都会创建ServletRequest对象,即监听器的requestInitialized()方法执行了。

监听三个域对象属性变更的监听器

  • ServletContextAttributeListener监听器、HttpSessionAttributeListener监听器、ServletRequestAttributeListener监听器
  • 方法:attributeAdded()、attributeRemoved()、attributeReplaced()

监听HttpSession中Java类状态改变的监听器

状态:保存在Session域中的java类可以有多种状态:绑定到Session中;从Session中解除绑定;随Session对象持久化到一个存储设备中(钝化);随session对象从一个存储设备中恢复(活化)。
Servlet规范中定义了两个特殊的监听接口,帮助java类了解自己在Session域中的状态:

  • HttpSessionBindingListener接口
  • HttpSessionActivationListener接口

实现这两个接口的类不需要在web.xml中进行配置。

  • HttpSessionBindingListener监听器
    • 监听Java类在HttpSession中的绑定和解除绑定的状态的监听器(javabean setAttribute即绑定,rempoveAttribute即解绑)。
    • 方法:valueBound()、valueUnbound()
    • 使用方式:javabean直接实现HttpSessionBindingListener接口,重写方法即可。
  • HttpSessionActivationListener监听器
    监听Java类在HttpSession中的钝化和活化的监听器(序列化与反序列化)。
    • 方法:sessionDidActivate()、sessionWillPassivate()
    • 使用方式:javabean直接实现HttpSessionActivationListener接口,序列化还需实现Serializable接口,重写方法即可。
    • 作用:假设一个购物网站同时有30万人访问,那么服务器需要开辟30万个Session空间,假如30分钟内都没有操作,那空间就被浪费掉了。可以通过配置短时间无操作使Session序列化,达到节约资源的目的。
    • 配置完成Session的序列化与反序列化
      在这里插入图片描述
      新建context.xml进行配置。Context标签可以配置在:
  • tomcat/conf/context.xml:所有tomcat下虚拟主机和虚拟目录下的工程都会序列化session;
  • tomcat/config/catalina/localhost/context.xml:localhost虚拟主机下的所有项目会序列化session;
  • 工程/META-INF/context.xml:当前工程才会序列化session。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值