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

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.基本介绍

image-20240130202508504

2.ServletContextListener

1.基本介绍

image-20240131093951998

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

image-20240131094929759

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.结果

image-20240131100010479

3.ServletContextAttributeListener监听器

1.基本介绍

image-20240131100225983

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.结果

image-20240131101308052

image-20240131101302940

4.HttpSessionListener

1.基本介绍

image-20240131101348911

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.结果

image-20240131102317745

image-20240131102326737

5.HttpSessionAttributeListener

1.基本介绍

image-20240131102439991

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.结果

image-20240131103158921

image-20240131103208491

6.ServletRequestListener

1.基本介绍

image-20240131103332588

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.结果

image-20240131104433136

7.其他监听器

image-20240131104514536

image-20240131104626388

8.监听器小结

1.创建监听器
1.基本概念

image-20240131094929759

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

image-20240131093951998

3.ServletContextAttributeListener

image-20240131100225983

4.HttpSessionListener

image-20240131101348911

5.HttpSessionAttributeListener

image-20240131101348911

6.ServletRequestListener

image-20240131103332588

相关文章:

JavaWeb-监听器

文章目录 1.基本介绍2.ServletContextListener1.基本介绍2.创建maven项目&#xff0c;导入依赖3.代码演示1.实现ServletContextListener接口2.配置web.xml3.结果 3.ServletContextAttributeListener监听器1.基本介绍2.代码实例1.ServletContextAttributeListener.java2.配置web…...

系统架构设计基础知识

一. 系统架构概述系统架构的定义 系统架构&#xff08;System Architecture&#xff09;是系统的一种整体的高层次的结构表示&#xff0c;是系统的骨架和根基&#xff0c;支撑和链接各个部分&#xff0c;包括构件、连接件、约束规范以及指导这些内容设计与演化的原理&#xff0…...

Vue自定义指令介绍及使用方法

介绍​ 除了 Vue 内置的一系列指令 (比如 v-model 或 v-show) 之外&#xff0c;Vue 还允许你注册自定义的指令 (Custom Directives)。 之前已经介绍了两种在 Vue 中重用代码的方式&#xff1a;组件 和 组合式函数。组件是主要的构建模块&#xff0c;而组合式函数则侧重于有状态…...

React 组件生命周期函数的用法和示例代码

React 中的生命周期函数可以分为三个阶段&#xff1a;Mounting&#xff08;挂载&#xff09;&#xff0c;Updating&#xff08;更新&#xff09;和 Unmounting&#xff08;卸载&#xff09;。每个阶段都有不同的函数&#xff0c;用于执行不同的操作。 Mounting&#xff08;挂载…...

【nginx运维】[emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)

关于nginx端口被占用的问题&#xff1a; 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是最近非常火的技术&#xff0c;两大著名前端框架React和Vue都使用了虚拟DOM&#xff0c;所以我觉得非常有必要结合浏览器的工作机制对虚拟DOM进行一次分析。当然了&#xff0c;React和Vue框架本身所蕴含的知识点非常多&#xff0c;而且也不是我们专栏的重点&#xff0c…...

arm工作模式、arm9通用寄存器、异常向量表中irq的异常向量、cpsr中的哪几位是用来设置工作模式以及r13,r14,15别名是什么?有什么作用?

ARM 首先先介绍一下ARM公司。 ARM成立于1990年11月&#xff0c;前身为Acorn计算机公司 主要设计ARM系列RISC处理器内核 授权ARM内核给生产和销售半导体的合作伙伴ARM公司不生产芯片 提供基于ARM架构的开发设计技术软件工具评估版调试工具应用软件总线架构外围设备单元等等CPU中…...

电脑上音频太多,播放速度又不一致,如何批量调节音频播放速度?

批量调节音频速度是现代音频处理中的一个重要环节&#xff0c;尤其在音乐制作、电影剪辑、有声书制作等领域&#xff0c;它能够帮助制作者快速高效地调整音频的播放速度&#xff0c;从而满足特定的制作需求。本文将详细介绍批量调节音频速度的方法、技巧和注意事项&#xff0c;…...

pe格式从入门到图形化显示(十)-扩展最后一个节

文章目录 前言一、怎么扩展最后一个节&#xff1f;二、扩大节1.扩展节2.保存文件 前言 通过分析和解析Windows PE格式&#xff0c;并使用qt进行图形化显示 一、怎么扩展最后一个节&#xff1f; 在PE文件中&#xff0c;扩大最后一个节通常是通过修改PE文件头中的节表来实现的。…...

设计模式之创建型模式---建造者模式

文章目录 建造者模式概述经典的建造者模式建造者模式的变种总结 建造者模式概述 建造者模式是一种广泛使用的设计模式&#xff0c;在三方开源库和各种SDK中经常见到。建造者设计模式在四人帮的经典著作《设计模式&#xff1a;可复用面向对象软件基础》中被提及&#xff0c;它的…...

如何从零开始训练一个语言模型

如何从零开始训练一个语言模型 #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

基本要求&#xff1a;每做一件事&#xff0c;软件就会按照事情权重加相应的分数&#xff0c;总分数也会增加&#xff0c;要可视化页面 使用Python编写的一个简单的日常任务记录和评分系统,包括可视化页面。 首先,我们定义一个任务字典,其中包含各种日常任务及其对应的权重分数…...

商家转账到零钱权限开通操作攻略

商家转账到零钱是什么&#xff1f; 商家转账到零钱是微信商户号里的一个功能&#xff0c;很早以前叫企业付款到零钱。 从2022年5月18日&#xff0c;原“企业付款到零钱”升级为“商家转账到零钱”&#xff0c;已开通商户的功能使用暂不受影响&#xff0c;新开通商户可前往「产…...

【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 通…...

数据结构—堆

什么是堆 堆是一种特殊的树形结构&#xff0c;其中每个节点都有一个值。堆可以分为两种类型&#xff1a;最大堆和最小堆。在最大堆中&#xff0c;每个节点的值都大于等于其子节点的值&#xff1b;而在最小堆中&#xff0c;每个节点的值都小于等于其子节点的值。这种特性使得堆…...

Kubernetes学习笔记8

Kubernetes集群客户端工具kubectl 我们已经能够部署Kubernetes了&#xff0c;那么我们如何使用Kubernetes集群运行企业的应用程序呢&#xff1f;那么&#xff0c;我们就需要使用命令行工具kubectl。 kubectl就是控制Kubernetes的驾驶舱&#xff0c;它允许你执行所有可能的Kube…...

[渗透利器]在线渗透测试工具箱?测评

前言 hxd更新完了在线工具箱&#xff0c;受邀写一下使用体验以及测评 使用体验 这个工具箱设计的比较轻便&#xff0c;以往用过的工具箱大多都是以离线打包的方式发布&#xff0c;该工具箱&#xff0c;作者自己掏钱自己买服务器&#xff0c;自己买带宽&#xff0c;先生大义。…...

rocketmq和rabbitmq总是分不清?

1. 官方解答 摘自百度搜索&#xff1a; 2. 通俗易懂的回答...

利用Python ARM网关仓储物流AGV小车控制器

在现代智慧物流体系中&#xff0c;高效的信息管理系统是物流中心实现精准跟踪货物、科学管理库存及优化配送路线的关键环节。通过采用ARM架构的工控机或网关&#xff0c;并结合Python的二次开发能力&#xff0c;可以有效集成并强化物流管理系统的数据处理与通信功能&#xff0c…...

Transformer详解和知识点总结

目录 1. 注意力机制1.1 注意力评分函数1.2 多头注意力&#xff08;Multi-head self-attention&#xff09; 2. Layer norm3. 模型结构4. Attention在Transformer中三种形式的应用 论文&#xff1a;https://arxiv.org/abs/1706.03762 李沐B站视频&#xff1a;https://www.bilibi…...

合宙BluePill开发板:9.9元ARM Cortex-M核心板硬件解析与实战指南

1. 项目概述&#xff1a;一块“炸场”的开发板意味着什么最近在嵌入式开发圈子里&#xff0c;一块名为“合宙BluePill”的新品开发板以9.9元包邮的价格开售&#xff0c;瞬间点燃了众多开发者、电子爱好者和学生群体的热情。这个价格&#xff0c;别说是一块功能完整的开发板&…...

ARM PMU性能监控单元原理与编程实践

1. ARM PMU性能监控基础架构解析 性能监控单元(Performance Monitoring Unit, PMU)是现代处理器微架构中的关键组件&#xff0c;它通过硬件计数器实现对处理器运行时行为的精确测量。在ARMv8/v9架构中&#xff0c;PMU的设计遵循了高度模块化和可扩展的原则&#xff0c;能够支持…...

Live Server 5分钟快速上手:打造高效前端实时预览环境

Live Server 5分钟快速上手&#xff1a;打造高效前端实时预览环境 【免费下载链接】vscode-live-server Launch a development local Server with live reload feature for static & dynamic pages. 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-live-server …...

DSP开发环境搭建实战:从CCSv3.3安装到XDS510仿真器配置全解析

1. CCSv3.3安装全流程详解 第一次接触DSP开发的朋友&#xff0c;安装CCSv3.3这个"老前辈"可能会遇到各种意想不到的问题。我当年在实验室安装时&#xff0c;光是补丁问题就折腾了一整天。下面就把这些年积累的实战经验分享给大家。 首先需要准备的是安装文件。虽然现…...

在Ubuntu上快速搭建LVGL模拟器开发环境

1. 为什么选择Ubuntu搭建LVGL模拟器 LVGL作为当下最流行的嵌入式图形库之一&#xff0c;以其高度可裁剪性和低资源占用的特性赢得了广大开发者的青睐。在实际开发中&#xff0c;我们经常需要先在PC端完成界面原型设计&#xff0c;再移植到嵌入式设备。Ubuntu作为Linux发行版中的…...

别再只盯着DICOM了!用Python的nibabel库处理NII格式医学影像,从数据加载到3D可视化全流程

解锁医学影像分析新维度&#xff1a;Pythonnibabel全流程处理NII格式实战指南 在医学影像分析领域&#xff0c;DICOM格式长期占据主导地位&#xff0c;但越来越多的研究者发现&#xff0c;在处理神经影像数据时&#xff0c;NII/NIfTI格式展现出独特的优势。这种专为脑科学研究…...

安卓位置伪装的终极指南:3步掌握应用级虚拟定位

安卓位置伪装的终极指南&#xff1a;3步掌握应用级虚拟定位 【免费下载链接】FakeLocation Xposed module to mock locations per app. 项目地址: https://gitcode.com/gh_mirrors/fak/FakeLocation 你是否曾因社交软件暴露真实位置而感到不安&#xff1f;是否需要在不同…...

Python应用性能监控实战:New Relic探针架构与部署指南

1. 项目概述&#xff1a;一个现代应用性能管理的Python探针如果你正在用Python开发Web应用、微服务或者任何需要对外提供服务的后端系统&#xff0c;那么“性能”和“可观测性”这两个词一定不会陌生。当线上服务突然变慢、错误率飙升&#xff0c;或者用户反馈某个接口卡顿时&a…...

小学生如何学好GESP

一、按年龄段科学规划学习路径 ‌1. 6–9岁&#xff08;小学低年级&#xff09;&#xff1a;重在逻辑启蒙&#xff0c;不急于学代码‌ A、‌核心任务‌&#xff1a;培养‌计算思维、问题拆解、条件判断‌等能力。 B、‌推荐方式‌&#xff1a; &#xff08;1&#xff09;、…...

【c++面向对象编程】第22篇:输入输出运算符重载:<< 与 >> 的友元实现

目录 一、为什么不能是成员函数&#xff1f; 二、标准写法&#xff08;两步法&#xff09; 第1步&#xff1a;在类中声明友元函数 第2步&#xff1a;实现全局函数 三、为什么要返回引用&#xff1f; 支持链式输出 正确 vs 错误示例 四、为什么需要友元&#xff1f;能否不…...