当前位置: 首页 > news >正文

监听器

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

 

Java Web开发中的监听器(listener)就是application、session、request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件,如下所示:

 监听器可以用来检测网站的在线人数,统计网站的访问量等等

监听器组件

监听器涉及三个组件:事件源,事件对象,事件监听器

当事件源发生某个动作的时候,它会调用事件监听器的方法,并在调用事件监听器方法的时候把事件对象传递进去。

我们在监听器中就可以通过事件对象获取得到事件源,从而对事件源进行操作!

Servle监听器

在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别 ServletContext, HttpSession和ServletRequest这三个域对象

和其它事件监听器略有不同的是,servlet监听器的注册不是直接注册在事件源上,而是由WEB容器负责注册,开发人员只需在web.xml文件中使用<listener>标签配置好监听器

监听对象的创建和销毁

HttpSessionListener、ServletContextListener、ServletRequestListener分别监控着Session、Context、Request对象的创建和销毁

  • HttpSessionListener(可以用来收集在线者信息)

  • ServletContextListener(可以获取web.xml里面的参数配置)

  • ServletRequestListener

监听对象属性变化

ServletContextAttributeListener、HttpSessionAttributeListener、ServletRequestAttributeListener分别监听着Context、Session、Request对象属性的变化

这三个接口中都定义了三个方法来处理被监听对象中的属性的增加,删除和替换的事件,同一个事件在这三个接口中对应的方法名称完全相同,只是接受的参数类型不同

  • attributeAdded()

  • attributeRemoved()

  • attributeReplaced()

监听Session内的对象

除了上面的6种Listener,还有两种Linstener监听Session内的对象,分别是HttpSessionBindingListener和HttpSessionActivationListener,实现这两个接口并不需要在web.xml文件中注册

  • 实现HttpSessionBindingListener接口,**JavaBean 对象可以感知自己被绑定到 Session 中和从 Session 中删除的事件【和HttpSessionAttributeListener的作用是差不多的】 **  

  • 实现HttpSessionActivationListener接口,JavaBean 对象可以感知自己被活化和钝化的事件(当服务器关闭时,会将Session的内容保存在硬盘上【钝化】,当服务器开启时,会将Session的内容在硬盘式重新加载【活化】) 。。

想要测试出Session的硬化和钝化,需要修改Tomcat的配置的。在META-INF下的context.xml文件中添加下面的代码:

<Context>
  <Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
  <Store className="org.apache.catalina.session.FileStore" directory="zhongfucheng"/>
  </Manager>
</Context>

 

转载于:https://www.cnblogs.com/hongchengshise/p/10386027.html

相关文章:

  • 用Hexo搭建属于自己的Blog
  • ipcs命令详解
  • 多态
  • 个人站点的日期查询
  • 2017-2018年度Scrum现状报告发布
  • 我们的春节--2019
  • BZOJ 1412 狼和羊的故事
  • LeetCode29.两数相除 JavaScript
  • vim命令模式下光标移动+查找
  • Fastjson的基本使用方法大全
  • 面孔相册按脸给照片分类 这是靠小米人脸检测技术实现的
  • 数据结构java版之冒泡排序及优化
  • 洛谷1474货币系统——小心重复的完全背包
  • 博弈论入门之斐波那契博弈
  • 工程优化暨babel升级小记
  • Android开源项目规范总结
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • flutter的key在widget list的作用以及必要性
  • HTTP 简介
  • Java应用性能调优
  • Leetcode 27 Remove Element
  • Protobuf3语言指南
  • Redis的resp协议
  • Spring Cloud Feign的两种使用姿势
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • VuePress 静态网站生成
  • 简析gRPC client 连接管理
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 深入 Nginx 之配置篇
  • 一份游戏开发学习路线
  • 智能网联汽车信息安全
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • puppet连载22:define用法
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​你们这样子,耽误我的工作进度怎么办?
  • (1)SpringCloud 整合Python
  • (pytorch进阶之路)扩散概率模型
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (三)c52学习之旅-点亮LED灯
  • (四)汇编语言——简单程序
  • (一一四)第九章编程练习
  • (转)菜鸟学数据库(三)——存储过程
  • (转)程序员技术练级攻略
  • .NET 发展历程
  • .netcore 获取appsettings
  • .net经典笔试题
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • [ IO.File ] FileSystemWatcher
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [2019.3.5]BZOJ1934 [Shoi2007]Vote 善意的投票
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [BZOJ1877][SDOI2009]晨跑[最大流+费用流]
  • [C#]获取指定文件夹下的所有文件名(递归)