JavaWeb Listener 监听器详解:三大域对象监听 + 在线人数统计实战
前言Listener监听器是 JavaWeb 三大组件最后一个专门用于监听 Web 域对象的创建、销毁、属性变化在事件触发时自动执行逻辑。它是基于观察者模式实现常用于服务器初始化、在线用户统计、Session 监听、全局属性监控。本篇带你掌握 Listener 核心概念、常用监听器、配置方式、在线人数统计实战。一、Listener 核心概念1. 什么是监听器Listener 是用于监听 JavaWeb 三大域对象状态变化的组件ServletContextapplicationHttpSessionsessionServletRequestrequest监听事件对象创建 / 销毁属性添加 / 替换 / 移除2. 监听分类常用域对象生命周期监听器ServletContextListenerHttpSessionListenerServletRequestListener域对象属性监听器ServletContextAttributeListenerHttpSessionAttributeListenerServletRequestAttributeListener二、三大常用生命周期监听器1. ServletContextListener最常用监听全局应用上下文的创建与销毁。contextInitialized()服务器启动时执行contextDestroyed()服务器关闭时执行适用场景初始化配置、加载全局数据、预热缓存。2. HttpSessionListener监听用户会话创建与销毁。sessionCreated()用户第一次访问创建 SessionsessionDestroyed()Session 超时 / 手动销毁适用场景在线人数统计、登录日志、用户下线处理。3. ServletRequestListener监听请求对象创建与销毁。requestInitialized()请求创建requestDestroyed()请求销毁适用场景请求日志、接口耗时统计。三、Listener 开发步骤步骤 1编写监听器类实现对应监听器接口重写方法package cn.tx.listener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class MyListener implements ServletContextListener, HttpSessionListener { // 服务器启动 Override public void contextInitialized(ServletContextEvent sce) { System.out.println(Web应用启动...); } // 服务器关闭 Override public void contextDestroyed(ServletContextEvent sce) { System.out.println(Web应用关闭...); } // Session创建 Override public void sessionCreated(HttpSessionEvent se) { System.out.println(用户Session创建); } // Session销毁 Override public void sessionDestroyed(HttpSessionEvent se) { System.out.println(用户Session销毁); } }步骤 2web.xml 注册监听器listener listener-classcn.tx.listener.MyListener/listener-class /listener步骤 3测试启动服务器→触发 contextInitialized访问页面→创建 Session关闭服务器→触发销毁。四、实战在线人数统计经典案例需求实时统计当前在线用户数Session 创建 1销毁 - 1页面展示。1. 监听器实现public class OnlineCountListener implements ServletContextListener, HttpSessionListener { private Integer count 0; // 服务器启动初始化在线人数为0 Override public void contextInitialized(ServletContextEvent sce) { sce.getServletContext().setAttribute(count, count); System.out.println(初始化在线人数0); } // Session创建人数1 Override public void sessionCreated(HttpSessionEvent se) { ServletContext context se.getSession().getServletContext(); count (Integer) context.getAttribute(count); context.setAttribute(count, count); System.out.println(用户上线当前在线 count); } // Session销毁人数-1 Override public void sessionDestroyed(HttpSessionEvent se) { ServletContext context se.getSession().getServletContext(); count (Integer) context.getAttribute(count); context.setAttribute(count, --count); System.out.println(用户下线当前在线 count); } Override public void contextDestroyed(ServletContextEvent sce) {} }2. 配置 web.xmllistener listener-classcn.tx.listener.OnlineCountListener/listener-class /listener3. 页面展示index.jsp% page contentTypetext/html;charsetUTF-8 % html head title在线人数统计/title /head body h1当前在线人数${count}/h1 a hreflogout.jsp退出登录/a /body /html4. 退出页面logout.jsp% // 销毁Session request.getSession().invalidate(); % h1已退出登录/h15. 效果新用户访问 → 在线人数 1退出 / 超时 → 在线人数 - 1所有用户共享同一个统计值五、Listener 高频面试题Listener 作用监听 Web 三大域对象的创建、销毁、属性变化执行自定义逻辑。ServletContextListener 何时执行服务器启动 / 关闭时。如何实现在线人数统计使用 HttpSessionListener 监听 Session 创建与销毁用 ServletContext 存全局数量。Listener 需要配置 url-pattern 吗不需要全局监听。总结Listener 是 Web 事件驱动编程核心基于观察者模式无感监听域对象变化。监听三大域Context、Session、Request监听两类事件生命周期、属性变化经典实战在线人数、初始化加载、日志监控它虽简单却是大型 Web 项目必备组件。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2452357.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!