JavaWeb-监听器
文章目录
- 1.基本介绍
- 2.ServletContextListener
- 1.基本介绍
- 2.创建maven项目,导入依赖
- 3.代码演示
- 1.实现ServletContextListener接口
- 2.配置web.xml
- 3.结果
- 3.ServletContextAttributeListener监听器
- 1.基本介绍
- 2.代码实例
- 1.ServletContextAttributeListener.java
- 2.配置web.xml
- 3.创建servlet演示
- 4.结果
- 4.HttpSessionListener
- 1.基本介绍
- 2.代码实例
- 1.HttpSessionListener.java
- 2.配置web.xml
- 3.创建servlet演示
- 4.结果
- 5.HttpSessionAttributeListener
- 1.基本介绍
- 2.代码实例
- 1.HttpSessionAttributeListener.java
- 2.配置web.xml
- 3.创建servlet演示
- 4.结果
- 6.ServletRequestListener
- 1.基本介绍
- 2.代码实例
- 1.ServletRequestListener.java
- 2.配置web.xml
- 3.结果
- 7.其他监听器
- 8.监听器小结
- 1.创建监听器
- 1.基本概念
- 2.创建方法
- 2.ServletContextListener
- 3.ServletContextAttributeListener
- 4.HttpSessionListener
- 5.HttpSessionAttributeListener
- 6.ServletRequestListener
1.基本介绍

2.ServletContextListener
1.基本介绍

2.创建maven项目,导入依赖
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version></dependency>
3.代码演示
1.实现ServletContextListener接口

package listener;import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;/*** @author 孙显圣* @version 1.0*/
public class ServletContextListener implements javax.servlet.ServletContextListener {public void contextInitialized(ServletContextEvent servletContextEvent) {ServletContext servletContext = servletContextEvent.getServletContext();System.out.println("监听到servletContext创建");}public void contextDestroyed(ServletContextEvent servletContextEvent) {ServletContext servletContext = servletContextEvent.getServletContext();System.out.println("监听到servletContext销毁 ");}
}
2.配置web.xml
<listener><listener-class>listener.ServletContextListener</listener-class></listener>
3.结果

3.ServletContextAttributeListener监听器
1.基本介绍

2.代码实例
1.ServletContextAttributeListener.java
package listener;import javax.servlet.ServletContextAttributeEvent;/*** @author 孙显圣* @version 1.0*/
public class ServletContextAttributeListener implements javax.servlet.ServletContextAttributeListener {public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {System.out.println("ServletContextAttributeListener监听到添加属性" + servletContextAttributeEvent.getName()+ servletContextAttributeEvent.getValue());}public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {System.out.println("ServletContextAttributeListener监听到删除属性" + servletContextAttributeEvent.getName()+ servletContextAttributeEvent.getValue());}public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {System.out.println("ServletContextAttributeListener监听到修改属性" + servletContextAttributeEvent.getName()+ servletContextAttributeEvent.getValue());}
}
2.配置web.xml
<listener><listener-class>listener.ServletContextAttributeListener</listener-class></listener>
3.创建servlet演示
package servlet;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
@WebServlet(urlPatterns = "/modify")
public class modifyServletContextAttribute extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ServletContext servletContext = super.getServletContext();//添加servletContext.setAttribute("name","孙显圣");//替换servletContext.setAttribute("name","李白");//删除servletContext.removeAttribute("name");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
4.结果


4.HttpSessionListener
1.基本介绍

2.代码实例
1.HttpSessionListener.java
package listener;import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;/*** @author 孙显圣* @version 1.0*/
public class HttpSessionListener implements javax.servlet.http.HttpSessionListener {public void sessionCreated(HttpSessionEvent httpSessionEvent) {HttpSession session = httpSessionEvent.getSession();System.out.println("HttpSessionListener监听到session创建id为" + session.getId());}public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {HttpSession session = httpSessionEvent.getSession();System.out.println("HttpSessionListener监听到session销毁id为" + session.getId());}
}
2.配置web.xml
<listener><listener-class>listener.HttpSessionListener</listener-class></listener>
3.创建servlet演示
package servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
@WebServlet(urlPatterns = "/modifySession")
public class modifySession extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//创建sessionHttpSession session = req.getSession();//删除sessionsession.invalidate();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
4.结果


5.HttpSessionAttributeListener
1.基本介绍

2.代码实例
1.HttpSessionAttributeListener.java
package listener;import javax.servlet.http.HttpSessionBindingEvent;/*** @author 孙显圣* @version 1.0*/
public class HttpSessionAttributeListener implements javax.servlet.http.HttpSessionAttributeListener {public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {String name = httpSessionBindingEvent.getName();System.out.println("监听到session创建属性:" + name);}public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {String name = httpSessionBindingEvent.getName();System.out.println("监听到session删除属性:" + name);}public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {String name = httpSessionBindingEvent.getName();System.out.println("监听到session替换属性:" + name);}
}
2.配置web.xml
<listener><listener-class>listener.HttpSessionAttributeListener</listener-class></listener>
3.创建servlet演示
package servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;/*** @author 孙显圣* @version 1.0*/
@WebServlet(urlPatterns = "/modifySessionAttribute")
public class modifySessionAttribute extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {HttpSession session = req.getSession();session.setAttribute("name","孙显圣");session.setAttribute("name","李白");session.removeAttribute("name");}
}
4.结果


6.ServletRequestListener
1.基本介绍

2.代码实例
1.ServletRequestListener.java
package listener;import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestEvent;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;/*** @author 孙显圣* @version 1.0*/
public class ServletRequestListener implements javax.servlet.ServletRequestListener {public void requestDestroyed(ServletRequestEvent servletRequestEvent) {System.out.println("ServletRequestListener 监听到 request对象销毁");}public void requestInitialized(ServletRequestEvent servletRequestEvent) {System.out.println("ServletRequestListener 监听到 request对象创建");ServletRequest servletRequest = servletRequestEvent.getServletRequest();//可以向下转型为HttpServletRequest,获取更多信息System.out.println("访问ip:" + servletRequest.getRemoteAddr());System.out.println("访问资源:" + ((HttpServletRequest)servletRequest).getRequestURL());}
}
2.配置web.xml
<listener><listener-class>listener.ServletRequestListener</listener-class></listener>
3.结果

7.其他监听器


8.监听器小结
1.创建监听器
1.基本概念

2.创建方法
- 实现接口,进行相应操作
- 配置web.xml(告诉tomcat)
2.ServletContextListener

3.ServletContextAttributeListener

4.HttpSessionListener

5.HttpSessionAttributeListener

6.ServletRequestListener

相关文章:
JavaWeb-监听器
文章目录 1.基本介绍2.ServletContextListener1.基本介绍2.创建maven项目,导入依赖3.代码演示1.实现ServletContextListener接口2.配置web.xml3.结果 3.ServletContextAttributeListener监听器1.基本介绍2.代码实例1.ServletContextAttributeListener.java2.配置web…...
系统架构设计基础知识
一. 系统架构概述系统架构的定义 系统架构(System Architecture)是系统的一种整体的高层次的结构表示,是系统的骨架和根基,支撑和链接各个部分,包括构件、连接件、约束规范以及指导这些内容设计与演化的原理࿰…...
Vue自定义指令介绍及使用方法
介绍 除了 Vue 内置的一系列指令 (比如 v-model 或 v-show) 之外,Vue 还允许你注册自定义的指令 (Custom Directives)。 之前已经介绍了两种在 Vue 中重用代码的方式:组件 和 组合式函数。组件是主要的构建模块,而组合式函数则侧重于有状态…...
React 组件生命周期函数的用法和示例代码
React 中的生命周期函数可以分为三个阶段:Mounting(挂载),Updating(更新)和 Unmounting(卸载)。每个阶段都有不同的函数,用于执行不同的操作。 Mounting(挂载…...
【nginx运维】[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
关于nginx端口被占用的问题: If you get following error, when you try to start nginx… [emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use) Then it means nginx or some other process is already using port 80. You can kill it using: su…...
浏览器工作原理与实践--虚拟DOM:虚拟DOM和实际的DOM有何不同
虚拟DOM是最近非常火的技术,两大著名前端框架React和Vue都使用了虚拟DOM,所以我觉得非常有必要结合浏览器的工作机制对虚拟DOM进行一次分析。当然了,React和Vue框架本身所蕴含的知识点非常多,而且也不是我们专栏的重点,…...
arm工作模式、arm9通用寄存器、异常向量表中irq的异常向量、cpsr中的哪几位是用来设置工作模式以及r13,r14,15别名是什么?有什么作用?
ARM 首先先介绍一下ARM公司。 ARM成立于1990年11月,前身为Acorn计算机公司 主要设计ARM系列RISC处理器内核 授权ARM内核给生产和销售半导体的合作伙伴ARM公司不生产芯片 提供基于ARM架构的开发设计技术软件工具评估版调试工具应用软件总线架构外围设备单元等等CPU中…...
电脑上音频太多,播放速度又不一致,如何批量调节音频播放速度?
批量调节音频速度是现代音频处理中的一个重要环节,尤其在音乐制作、电影剪辑、有声书制作等领域,它能够帮助制作者快速高效地调整音频的播放速度,从而满足特定的制作需求。本文将详细介绍批量调节音频速度的方法、技巧和注意事项,…...
pe格式从入门到图形化显示(十)-扩展最后一个节
文章目录 前言一、怎么扩展最后一个节?二、扩大节1.扩展节2.保存文件 前言 通过分析和解析Windows PE格式,并使用qt进行图形化显示 一、怎么扩展最后一个节? 在PE文件中,扩大最后一个节通常是通过修改PE文件头中的节表来实现的。…...
设计模式之创建型模式---建造者模式
文章目录 建造者模式概述经典的建造者模式建造者模式的变种总结 建造者模式概述 建造者模式是一种广泛使用的设计模式,在三方开源库和各种SDK中经常见到。建造者设计模式在四人帮的经典著作《设计模式:可复用面向对象软件基础》中被提及,它的…...
如何从零开始训练一个语言模型
如何从零开始训练一个语言模型 #mermaid-svg-gtUlIrFtNPw1oV5a {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-gtUlIrFtNPw1oV5a .error-icon{fill:#552222;}#mermaid-svg-gtUlIrFtNPw1oV5a .error-text{fill:#5522…...
Python 设计一个监督自己的软件1
基本要求:每做一件事,软件就会按照事情权重加相应的分数,总分数也会增加,要可视化页面 使用Python编写的一个简单的日常任务记录和评分系统,包括可视化页面。 首先,我们定义一个任务字典,其中包含各种日常任务及其对应的权重分数…...
商家转账到零钱权限开通操作攻略
商家转账到零钱是什么? 商家转账到零钱是微信商户号里的一个功能,很早以前叫企业付款到零钱。 从2022年5月18日,原“企业付款到零钱”升级为“商家转账到零钱”,已开通商户的功能使用暂不受影响,新开通商户可前往「产…...
【DAC‘ 2022】Kite: A Family of Heterogeneous Interposer Topologies
Kite: A Family of Heterogeneous Interposer Topologies Enabled via Accurate Interconnect Modeling 背景和动机 背景动机 工作内容 KITE 拓扑 实验方法和评估结果 Kite: A Family of Heterogeneous Interposer Topologies Enabled via Accurate Interconnect Modeling 通…...
数据结构—堆
什么是堆 堆是一种特殊的树形结构,其中每个节点都有一个值。堆可以分为两种类型:最大堆和最小堆。在最大堆中,每个节点的值都大于等于其子节点的值;而在最小堆中,每个节点的值都小于等于其子节点的值。这种特性使得堆…...
Kubernetes学习笔记8
Kubernetes集群客户端工具kubectl 我们已经能够部署Kubernetes了,那么我们如何使用Kubernetes集群运行企业的应用程序呢?那么,我们就需要使用命令行工具kubectl。 kubectl就是控制Kubernetes的驾驶舱,它允许你执行所有可能的Kube…...
[渗透利器]在线渗透测试工具箱?测评
前言 hxd更新完了在线工具箱,受邀写一下使用体验以及测评 使用体验 这个工具箱设计的比较轻便,以往用过的工具箱大多都是以离线打包的方式发布,该工具箱,作者自己掏钱自己买服务器,自己买带宽,先生大义。…...
rocketmq和rabbitmq总是分不清?
1. 官方解答 摘自百度搜索: 2. 通俗易懂的回答...
利用Python ARM网关仓储物流AGV小车控制器
在现代智慧物流体系中,高效的信息管理系统是物流中心实现精准跟踪货物、科学管理库存及优化配送路线的关键环节。通过采用ARM架构的工控机或网关,并结合Python的二次开发能力,可以有效集成并强化物流管理系统的数据处理与通信功能,…...
Transformer详解和知识点总结
目录 1. 注意力机制1.1 注意力评分函数1.2 多头注意力(Multi-head self-attention) 2. Layer norm3. 模型结构4. Attention在Transformer中三种形式的应用 论文:https://arxiv.org/abs/1706.03762 李沐B站视频:https://www.bilibi…...
黑客入侵终端设备的五种常见方式
黑客入侵终端设备的五种常见方式 网络安全重磅福利:入门&进阶全套282G学习资源包免费分享! 黑客的攻击方式并非都是复杂繁琐的。当黑客发起网络攻击时仅为了牟利而已,并不是都需要掌握高超的技术。他们的动机大体上可以分为两种ÿ…...
STM32+FreeRTOS双分区开发避坑指南:Bootloader跳转前别忘了这行关键代码
STM32FreeRTOS双分区开发避坑指南:Bootloader跳转前别忘了这行关键代码 当你在STM32上实现BootloaderApp双分区架构时,是否遇到过这样的场景:Bootloader明明成功跳转到了应用程序,却在启动FreeRTOS调度器时突然崩溃?寄…...
3步解放双手:崩坏星穹铁道自动化工具让资源收集效率提升200%
3步解放双手:崩坏星穹铁道自动化工具让资源收集效率提升200% 【免费下载链接】StarRailAssistant 崩坏:星穹铁道自动化 | 崩坏:星穹铁道自动锄大地 | 崩坏:星穹铁道锄大地 | 自动锄大地 | 基于模拟按键 项目地址: https://gitco…...
深入剖析PHP 7.4.21开发服务器源码泄露漏洞及其复现过程
1. PHP开发服务器源码泄露漏洞初探 最近在测试PHP 7.4.21开发服务器时,我发现一个挺有意思的漏洞——源码可以直接被读取。这可不是闹着玩的,想象一下你的网站源代码像裸奔一样暴露在外,数据库配置、加密逻辑全都一览无余。这个漏洞影响所有P…...
从零开始玩转Arduino:手把手教你用MOS管和继电器控制大电流设备(附电路图)
从零开始玩转Arduino:手把手教你用MOS管和继电器控制大电流设备(附电路图) 当你第一次尝试用Arduino控制大功率设备时,可能会遇到一个常见问题:小小的开发板输出引脚根本无法直接驱动电机、灯带或加热管。这时候&#…...
若依系统Excel字典字段处理进阶:如何保留原始值并生成错误报告
若依系统Excel字典字段处理进阶:如何保留原始值并生成错误报告 在企业级应用开发中,Excel数据导入导出是高频需求场景。若依(RuoYi)作为流行的快速开发框架,其内置的Excel工具类ExcelUtil.java提供了基础的数据转换能力,但在处理字…...
51单片机项目避坑实录:我的声光控灯为什么白天也亮?从硬件到代码的故障排查指南
51单片机声光控灯项目实战:从硬件选型到代码调试的深度避坑指南 深夜的实验室里,我盯着眼前这个不听话的声光控灯——明明窗外阳光明媚,它却固执地亮着。作为一名嵌入式开发新手,这个看似简单的51单片机项目让我踩遍了所有可能的坑…...
Realistic Vision V5.1镜像免配置部署教程:Docker+本地模型路径自动校验
Realistic Vision V5.1镜像免配置部署教程:Docker本地模型路径自动校验 1. 项目概述 Realistic Vision V5.1虚拟摄影棚是基于Stable Diffusion 1.5生态顶级写实模型开发的本地化工具,专为追求摄影级人像效果的用户设计。这个解决方案通过Docker容器化技…...
AutoGLM-Phone-9B快速上手:图文语音全能AI,小白也能轻松部署
AutoGLM-Phone-9B快速上手:图文语音全能AI,小白也能轻松部署 1. AutoGLM-Phone-9B简介 1.1 什么是AutoGLM-Phone-9B AutoGLM-Phone-9B是一款专为移动设备优化的多模态AI模型,它能同时理解文字、图片和语音信息。简单来说,就像给…...
如何永久保存微信聊天记录?WeChatMsg免费工具终极指南
如何永久保存微信聊天记录?WeChatMsg免费工具终极指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCha…...
