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

JavaWEB的三大组件之一---监听器Listener

一. 监听器 Listener

1.1 监听器概述

在JavaWeb被监听的事件源为:ServletContext、HttpSession、ServletRequest,即三大域对象。

  • 监听域对象“创建”与“销毁”的监听器;

  • 监听域对象“操作域属性”的监听器;

  • 监听HttpSession的监听器。

1.2 ServletContextListener

ServletContextListener:Tomcat启动和关闭时调用下面两个方法:

  • public void contextInitialized(ServletContextEvent evt):ServletContext对象被创建后调用;

  • public void contextDestroyed(ServletContextEvent evt):ServletContext对象被销毁前调用;

1.3 HttpSessionListener

HttpSessionListener:开始会话和结束会话时调用下面两个方法

  • public void sessionCreated(HttpSessionEvent evt):HttpSession对象被创建后调用;

  • public void sessionDestroyed(HttpSessionEvent evt):HttpSession对象被销毁前调用;

1.4 ServletRequestListener

ServletRequestListener:开始请求和结束请求时调用下面两个方法

  • public void requestInitiallized(ServletRequestEvent evt):ServletRequest对象被创建后调用;

  • public void requestDestroyed(ServletRequestEvent evt):ServletRequest对象被销毁前调用。

1.5 Listener的使用

web.xml配置


<listener><listener-class>cn.tx.listener.MyListener</listener-class>
</listener>

Listen代码:

public class MyListener implements ServletContextListener,HttpSessionListener, ServletRequestListener {public MyListener() {}@Overridepublic void requestInitialized(ServletRequestEvent sre) {System.out.println("requestInitialized");}@Overridepublic void requestDestroyed(ServletRequestEvent sre) {System.out.println("requestDestroyed");}public void contextInitialized(ServletContextEvent sce) {System.out.println("contextInitialized");}public void contextDestroyed(ServletContextEvent sce) {System.out.println("contextDestroyed");}public void sessionCreated(HttpSessionEvent se) {System.out.println("sessionCreated");}public void sessionDestroyed(HttpSessionEvent se) {System.out.println("sessionDestroyed");}}

1.6 监听器练习

通过HttpSessionListener监听Session的在线和销毁实现在线人员实时统计

index.jsp代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>企业信息官网</title></head><body><h1>欢迎登陆:达内学员</h1><h2>当前在线人数:${count}</h2><hr><a href="logout.jsp">退出</a></body>
</html>

Logout.jsp代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><%request.getSession().invalidate();%>
<h1>已退出</h1>
</body>
</html>

MyListener代码:

public class MyListener implements ServletContextListener,HttpSessionListener {// 定义一个在线人数 初始为0private Integer count = 0;public MyListener() {}public void contextInitialized(ServletContextEvent sce) {// 初始化Servlet容器时把在线人数存入ServletContext context = sce.getServletContext();context.setAttribute("count",count);System.out.println("contextInitialized");}public void contextDestroyed(ServletContextEvent sce) {System.out.println("contextDestroyed");}public void sessionCreated(HttpSessionEvent se) {// 如果创建了一个session 那么在线人数加1onLineCount(se.getSession().getServletContext(),true);System.out.println("sessionCreated");}public void sessionDestroyed(HttpSessionEvent se) {// 如果销毁了一个session 那么在线人数减1onLineCount(se.getSession().getServletContext(),false);System.out.println("sessionDestroyed");}/*** 添加或删除在线人数* @param context* @param isAdd*/private void onLineCount(ServletContext context,boolean isAdd){if(isAdd){count = (Integer)context.getAttribute("count");context.setAttribute("count",++count);}else{count = (Integer)context.getAttribute("count");context.setAttribute("count",--count);}}
}
http://www.jsqmd.com/news/570404/

相关文章:

  • 成都装修行业进入“存量厮杀”阶段:十家机构横向对比,谁在真正兑现“所见即所得”? - 推荐官
  • 宝塔面板访问地址丢失?快速找回的实用指南
  • 零代码部署社区门禁:AI读脸术镜像快速安装教程
  • Livebook共享密钥管理终极指南:团队协作中的安全数据共享解决方案
  • SuGaR与NeRF对比分析:为什么高斯泼溅是未来趋势
  • 2026年全国医师进修办理服务机构深度测评 - 深度智识库
  • 快速体验AI识别:ResNet18镜像部署与使用完整教程
  • CHORD-X在MATLAB数据分析工作流中的应用:自动生成仿真实验报告
  • Keil工程窗口那些带叹号、星号、钥匙的图标,到底在提醒你什么?
  • 5G NR PUCCH格式0与格式2实战解析:如何优化ACK/NACK反馈性能
  • OpenJSCAD.org扩展开发完全手册:从零开始创建自定义IO格式
  • 5分钟学会OrgChart:从零开始创建动态组织图
  • GEO 优化是什么?2026 年 4 月实测全国 5 家头部 GEO 优化服务商,这份选型指南请收好 - 博客湾
  • 如何快速上手tuic:从零开始的安装与配置教程
  • 教你4个OFD转PDF技巧,电子发票轻松变PDF格式
  • 窗口记忆与多屏管理:PersistentWindows让你的工作区布局永不丢失
  • HFSS19实战:手把手教你搞定SMA接头与微带分支的联合仿真(附模型文件)
  • 推荐使用:eSpeak NG 文本转语音引擎
  • 2026最新广东广州防水航空插头推荐!优质防水航空插头权威榜单发布,帮助消费者精准筛选优质产品 - 十大品牌榜
  • 全国范围内靠谱的宠物食品袋定制认证厂家怎么选 - 工业推荐榜
  • 突破设备限制,实现VR视频自由体验
  • Keras UNet模型深度解析:从原理到医疗影像分割实战
  • 告别Node版本混乱!用NVM管理多项目环境(Mac保姆级指南+Zsh配置)
  • SwanLab硬件监控全解析:支持英伟达、AMD、昇腾等10+国产芯片
  • 沃尔玛购物卡回收避坑指南:3 个标准帮你选对正规渠道 - 团团收购物卡回收
  • 【实战解析】微软Copilot多模型协作架构:GPT写稿+Claude审稿,效果提升13.8%的技术原理与工程实践
  • 智能抢购京东茅台:零基础上手的成功率提升指南
  • 手把手教你用K8s和LLaMA-Factory在昇腾910B上微调Qwen1.5模型(含完整配置流程)
  • 物联网技术核心解析:从基础架构到应用实践
  • NEURAL MASK 从零开始入门教程:第一行代码到生成第一张重构图