JavaWeb 监听器

news/2025/1/16 5:32:13/

Javaweb监听器是一种特殊的类,用于监听Web应用程序中的事件和对象。它可以监听Web应用程序的启动和关闭事件,会话的创建和销毁事件,以及请求和响应的事件等。监听器可以在特定事件发生时执行一些特定的操作,比如记录日志、初始化资源、清理资源等。

常见的Javaweb监听器包括ServletContextListener、HttpSessionListener、ServletRequestListener等。这些监听器可以帮助开发人员更好地管理Web应用程序的生命周期和资源,提高应用程序的性能和稳定性。

目录

一.ServletContextListener

二.ServletContextAttributeListener

三. HttpSessionListener 

四.HttpSessionAttributeListener

 五.ServletRequestListener

 六.ServletRequestAttributeListener

七. HttpSessionBindingListener

八. HttpSessionActivationListener


本文介绍几个最常用的监听器

一.ServletContextListener

1.作用:监听 ServletContext 创建或销毁(当我们 Web 应用启动时,就会创建 ServletContext), 即生命周期监听

2.相关方法

  • void contextInitialized(ServletContextEvent sce) 创 建 Servletcontext 时触发
  • void contextDestroyed(ServletContextEvent sce) 销毁 Servletcontext时触发

3.常用于 加载初始化的配置文件;比如 spring 的配置文件 ,任务调度(配合定时器Timer/TimerTask)

java">/*** 1. 当一个类实现了 ServletContextListener* 2. 该类就是一个监听器* 3. 该类可以监听的事件 由该类实现的监听接口决定 ,比如 实现ServletContextListener*    , 则该类就可以监听 ServletContext对象的创建和销毁, 以此类推* 4. HspServletContextListener 就是一个监听者* 5. 当web应用启动时,就会产生 ServletContextEvent 事件, 会调用监听器的对应事件处理方法*    contextInitialized, 同时会传递 事件对象* 6. 程序员可以通过 ServletContextEvent 事件对象,来获取需要的信息, 然后再进行业务处理* 7. tomcat怎么知道这个监听器存在 ? 因为我们需要在web.xml中配置*/
public class HspServletContextListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent servletContextEvent) {ServletContext servletContext = servletContextEvent.getServletContext();System.out.println("HspServletContextListener 监听到 " +servletContext + " 被创建..");//如果我们获取到ServletContext 对象..进行业务处理}@Overridepublic void contextDestroyed(ServletContextEvent servletContextEvent) {ServletContext servletContext = servletContextEvent.getServletContext();System.out.println("HspServletContextListener 监听到 " +servletContext + " 被销毁..");//比如可以对servletContext 数据进行处理, 或者日志的管理...System.out.println("进行处理工作.....");}
}

二.ServletContextAttributeListener

1.作用:监听ServletContext属性变化

2.相关方法

  • void attributeAdded(ServletContextAttributeEvent event) 添加属性时调用
  • void attributeReplaced(ServletContextAttributeEvent event) 替换属性时调用
  • void attributeRemoved(ServletContextAttributeEvent event) 移除属性时调用
java">public class HspServletContextAttributeListener implements ServletContextAttributeListener {@Overridepublic void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {System.out.println("HspServletContextAttributeListener 监听到添加属性.."+ servletContextAttributeEvent.getName() + "=" + servletContextAttributeEvent.getValue() );}@Overridepublic void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {System.out.println("HspServletContextAttributeListener 监听到删除属性.."+ servletContextAttributeEvent.getName() + "=" + servletContextAttributeEvent.getValue() );}@Overridepublic void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {System.out.println("HspServletContextAttributeListener 监听到修改属性.."+ servletContextAttributeEvent.getName() + "=" + servletContextAttributeEvent.getValue() );}
}

三. HttpSessionListener 

1.作用:监听Session创建和销毁,即生命周期监听

2.相关方法

  • void sessionCreated(HttpSessionEvent se) 创建 session 时调用
  • void sessionDestroyed(HttpSessionEvent se) 销毁 session 时调用

3.常用于监控用户上线离线

java">public class HspHttpSessionListener implements HttpSessionListener {@Overridepublic void sessionCreated(HttpSessionEvent httpSessionEvent) {HttpSession session = httpSessionEvent.getSession();//当session创建时,我们给它设置一个生命周期 30ssession.setMaxInactiveInterval(30);System.out.println("HspHttpSessionListener 监听到 session创建= " +session.getId());System.out.println("用户id=" + session.getId() + " 上线");}@Overridepublic void sessionDestroyed(HttpSessionEvent httpSessionEvent) {HttpSession session = httpSessionEvent.getSession();System.out.println("HspHttpSessionListener 监听到 session销毁= " +session.getId());System.out.println("用户id=" + session.getId() + " 离线");}
}

四.HttpSessionAttributeListener

1.作用:监听Session属性变化

2.相关方法

  • void attributeAdded(ServletRequestAttributeEvent srae) 添加属性时
  • void attributeReplaced(ServletRequestAttributeEvent srae) 替换属性时
  • void attributeRemoved(ServletRequestAttributeEvent srae) 移除属性时
java">public class HspHttpSessionAttributeListener implements HttpSessionAttributeListener {@Overridepublic void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {//HttpSession session = httpSessionBindingEvent.getSession();System.out.println("HspHttpSessionAttributeListener 监听到session添加属性" +httpSessionBindingEvent.getName() + "=" + httpSessionBindingEvent.getValue());}@Overridepublic void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {HttpSession session = httpSessionBindingEvent.getSession();System.out.println("HspHttpSessionAttributeListener 监听到session删除属性" +httpSessionBindingEvent.getName());}@Overridepublic void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {System.out.println("HspHttpSessionAttributeListener 监听到session修改属性" +httpSessionBindingEvent.getName() + "=" + httpSessionBindingEvent.getValue());}
}

 五.ServletRequestListener

1.作用:监听Request创建和销毁

2.相关方法

  • void requestInitialized(ServletRequestEvent sre) 创建 request 时
  • void requestDestroyed(ServletRequestEvent sre) 销毁 request时

3.常用于监控某个IP访问网站的频率,日志记录,访问资源的情况

java">public class HspRequestListener implements ServletRequestListener {@Overridepublic void requestInitialized(ServletRequestEvent servletRequestEvent) {System.out.println("HspRequestListener 监听到 request对象创建");ServletRequest servletRequest = servletRequestEvent.getServletRequest();System.out.println("记录访问日志....");System.out.println("访问IP= " + servletRequest.getRemoteAddr());System.out.println("访问的资源= " + ((HttpServletRequest)servletRequest).getRequestURL());}@Overridepublic void requestDestroyed(ServletRequestEvent servletRequestEvent) {System.out.println("HspRequestListener 监听到 request对象被销毁");}
}

 六.ServletRequestAttributeListener

1.作用:监听Request属性变化

2.相关方法

  • void attributeAdded(ServletRequestAttributeEvent srae) 添加属性时
  • void attributeReplaced(ServletRequestAttributeEvent srae) 替换属性时
  • void attributeRemoved(ServletRequestAttributeEvent srae) 移除属性时

七. HttpSessionBindingListener

1.作用:用于监听HttpSession中属性绑定和解绑的事件的监听器。当一个对象被绑定到HttpSession中或者从HttpSession中解绑时,实现了HttpSessionBindingListener接口的类可以接收到通知,并执行相应的操作。

2.相关方法

  • void valueBound(HttpSessionBindingEvent event):当一个对象被绑定到HttpSession中时调用。可以在这个方法中执行一些初始化操作或者记录日志等操作。
  • void valueUnbound(HttpSessionBindingEvent event):当一个对象从HttpSession中解绑时调用。可以在这个方法中执行一些清理操作或者释放资源等操作。

八. HttpSessionActivationListener

1.作用:用于监听HttpSession的钝化和活化事件的监听器。当一个HttpSession被钝化(即序列化到磁盘上)或者被活化(即从磁盘上反序列化回内存)时,实现了HttpSessionActivationListener接口的类可以接收到通知,并执行相应的操作。

2.相关方法

  • void sessionWillPassivate(HttpSessionEvent se):当一个HttpSession将要被钝化时调用。可以在这个方法中执行一些准备钝化的操作或者记录日志等操作。
  • void sessionDidActivate(HttpSessionEvent se):当一个HttpSession被活化时调用。可以在这个方法中执行一些准备活化的操作或者恢复状态等操作。

http://www.ppmy.cn/news/1428932.html

相关文章

python连接数据库失败怎么解决

Python 连接数据库失败怎么解决? 什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。…

数字谐振器设计

数字谐振器设计 电路里的谐振:当电路中激励的频率等于电路的固有频率时,电路电磁振荡的振幅也将达到峰值。 形式一 形式二 例子

MCU的最佳存储方案CS创世 SD NAND

MCU的最佳存储方案CS创世 SD NAND 写在最前面MCU是什么CS创世 SD NAND 6大优势 写在最前面 转载自 雷龙官网 MCU是什么 大家都知道MCU是一种"麻雀"虽小,却"五脏俱全"的主控。它的应用领域非常广泛,小到手机手表,大到航空…

excel文件预览: luckyexcel+luckysheet

luckyexcel 使用 npm i luckyexcel --saveluckysheet 使用 luckysheet文档 克隆Luckysheet源码到本地 git clone https://github.com/dream-num/Luckysheet.git安装依赖 npm install npm install gulp -g 开发 npm run dev打包 npm run build本地引入 npm run build 后 …

SVN服务端提交日志不能为空,限制文件大小和文件类型(windows)

1. windows环境下,修改svn的pre-commit hook以实现提交日志不能为空,限制文件大小和文件类型。 2. 将下列代码复制粘贴进去即可。 echo off setlocal enabledelayedexpansion set REPOS%1 set TXN%2 rem 限制的文件大小byte set MAX_SIZE51200for /f &q…

创建一个javascript公共方法的npm包,js-tool-big-box,发布到npm上,一劳永逸

前端javascript的公共方法太多了,时间日期的,数值的,字符串的,搞复制的,搞网络请求的,搞数据转换的,几乎就是每个新项目,有的拷一拷,没有的继续写,放个utils目…

「GO基础」起源与演进

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Binutils简介

Binutils简介 Binutils目录结构 ├── bfd ├── binutils ├── config ├── cpu ├── elfcpp ├── etc ├── gas ├── gold ├── gprof ├── include ├── intl ├── ld ├── libctf ├── libiberty ├── opcodes ├── texinfo └── zlib 从…