监听器
代理设计模式
当某一个对象发生某一个事件时,通知另一个对象,让另一个对象做某事
🐤代理设计模式步骤
- 定义好协议(接口)
- 遵守协议(实现接口)
- 成为代理
- 调用代理方法
监听器的内部使用的就是代理模式
监听器简介
- 能监听某个对象的状态变化的组件
- 监听域对象的变化
🐤监听器相关的概念
- 事件源:被监听的对象
- request
- session
- servletContext
- 监听器:监听事件源的对象
- 8个监听器
- 注册监听器:监听器与事件源相绑定
- 响应行为:监听到事件源变化时,去做什么事情
监听器划分
- 三个监听域对象的创建与销毁
- ServletContextListener
- HttpSessionListener
- ServletRequestListener
- 三个监听域对象当中属性变化
- ServletContextAttributeListener
- HttpSessionAttributeListener
- ServletRequestAttributeListener
域监听器
ServletContextListener
- 监听ServletContext域的创建与销毁的监听器ServletContextListener
- ServletContext域生命周期
- 服务器启动创建
- 服务器关闭销毁
- 监听器的编写步骤
- 编写一个监听器类去实现监听器
ServletContextListener
接口 - 覆盖监听器的方法
- 编写一个监听器类去实现监听器
public class ServletContextListenerTest implements ServletContextListener {
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("Servlet创建");
}
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("Servlet销毁");
}
}
- 需要在
web.xml
中进行配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<listener>
<listener-class>com.bntang666.ServletContextListenerTest</listener-class>
</listener>
</web-app>
- 作用
- 初始化的工作:初始化对象、初始化数据、加载数据库驱动、连接池的初始化
- 加载一些初始化的配置文件
- 任务调度
HttpSessionListener
- 监听HttpSession域的创建与销毁的监听器HttpSessionListener
- HttpSession的生命周期
- 第一次调用request.getSession时创建
- 服务器关闭、session过期、手动销毁
- 编写步骤
- 同上
- 运用场景
- 记录访问人数
ServletRequestListener
- 监听ServletRequest域创建与销毁的监听器ServletRequestListener
- ServletRequest的生命周期
- 创建:每一次请求都会创建request
- 销毁:请求结束
Session中对象存储监听
- 一个对象存储到session当中的几种状态
- 绑定状态:就一个对象被放到session域中
- 解绑状态:就是这个对象从session域中移除了
- 钝化状态:是将session内存中的对象持久化(序列化)到磁盘
- 活化状态:就是将磁盘上的对象再次恢复到session内存中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具