Servlet的监听器

Servlet常用的监听器
ServletContextAttributeListener 用来感知ServlerContext对象属性变化,比如添加或删除属性变化
ServletContextListener 用来感知ServlerContext对象的创建和销毁的
ServletRequestListener 可以用来监听感知ServletRequest对象的创建和销毁的
ServletRequestAttributeListener 用来感知ServletRequest属性变化,如何添加或删除属性还是替换
HttpSessionListener监听session的变化,常用于统计在线人数
HttpSessionAttributeListener用来监听Session属性变化
HttpSessionBindingListener 用来监听把一个数据绑定到Session对象 感知监听器
HttpSessionActivationListener用来监听session绑定的对象钝化(把对象持久化磁盘)
常用的有前6个

package com.sparrow.listener;import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;/*** @Author: 诉衷情の麻雀* @Description: 当一个类实现了ServletContextListener 是一个监听器,该类可以监听的事件* 由该类实现的监听接口决定 该类可以监听ServletContext的创建和销毁* 当web应用启动时,就会产生ServletContextEvent事件,会调用监听器的对应事件处理方法contextInitialized,同时会传递事件对象* 我们可以通过ServletContextEvent事件对象,来获取需要的信息,然后再进行业务处理* 需要在web.xml配置监听器这样才能使tomcat知道,底层使用反射机制* @DateTime: 2023/7/5 9:57**/
public class SparrowServletContextListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {ServletContext servletContext = sce.getServletContext();System.out.println("SparrowServletContextListener监听到" + servletContext+ " 被创建...");//如果我们获取到ServletContext对象进行业务处理}@Overridepublic void contextDestroyed(ServletContextEvent sce) {ServletContext servletContext = sce.getServletContext();System.out.println("SparrowServletContextListener监听到" + servletContext+ " 被销毁...");//比如可以对servletContext数据进行处理 或者日志的管理System.out.println("进行处理");}
}
/*** @Author: 诉衷情の麻雀* @Description: TODO* @DateTime: 2023/7/5 10:10**/
public class SparrowServletContextAttributeListener implements ServletContextAttributeListener {@Overridepublic void attributeAdded(ServletContextAttributeEvent scae) {System.out.println("SparrowServletContextAttributeListener监听到"+ scae.getName());}@Overridepublic void attributeRemoved(ServletContextAttributeEvent scae) {System.out.println("SparrowServletContextAttributeListener监听到:" + scae.getValue());}@Overridepublic void attributeReplaced(ServletContextAttributeEvent scae) {}
}

ServletContextAttributeListener属性监听器

package com.sparrow.listener;import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;/*** @Author: 诉衷情の麻雀* @Description: TODO* @DateTime: 2023/7/5 10:10**/
public class SparrowServletContextAttributeListener implements ServletContextAttributeListener {@Overridepublic void attributeAdded(ServletContextAttributeEvent scae) {System.out.println("SparrowServletContextAttributeListener监听到添加属性:"+ scae.getName()+"=" + scae.getValue());}@Overridepublic void attributeRemoved(ServletContextAttributeEvent scae) {System.out.println("SparrowServletContextAttributeListener监听到删除属性:" + scae.getName() + "="+ scae.getValue());}@Overridepublic void attributeReplaced(ServletContextAttributeEvent scae) {System.out.println("SparrowServletContextAttributeListener监听到修改/替换属性:" + scae.getName() + "="+ scae.getValue());}
}

配置一个HelloServlet

/*** @Author: 诉衷情の麻雀* @Description: TODO* @DateTime: 2023/7/18 19:59**/
public class HelloServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doPost(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("helloServlet被调用了");ServletContext servletContext = req.getServletContext();servletContext.setAttribute("name", "诉衷情の麻雀");servletContext.setAttribute("name", "诉衷情の麻雀");servletContext.removeAttribute("name");}
}
   <servlet><servlet-name>HelloServlet</servlet-name><servlet-class>com.sparrow.servlet.HelloServlet</servlet-class></servlet><servlet-mapping><servlet-name>HelloServlet</servlet-name><url-pattern>/helloServlet</url-pattern></servlet-mapping>

在这里插入图片描述

HttpSessionListener

/*** @Author: 诉衷情の麻雀* @Description: TODO* @DateTime: 2023/7/5 10:25**/
public class SparrowHttpSessionListener implements HttpSessionListener {@Overridepublic void sessionCreated(HttpSessionEvent se) {HttpSession session = se.getSession();//当session创建时设置一个生命周期session.setMaxInactiveInterval(30);System.out.println("SparrowHttpSessionListener监听到session创建= " + session.getId());}@Overridepublic void sessionDestroyed(HttpSessionEvent se) {HttpSession session = se.getSession();System.out.println("SparrowHttpSessionListener监听到session销毁= " + session.getId());}
}
 @Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取sessionHttpSession session = req.getSession(); //如果没有就创建}

配置监听器

 <!--配置监听器--><listener><listener-class>com.sparrow.listener.SparrowHttpSessionListener</listener-class></listener><listener><listener-class>com.sparrow.listener.SparrowServletContextListener</listener-class></listener><listener><listener-class>com.sparrow.listener.SparrowServletContextAttributeListener</listener-class></listener><listener><listener-class>com.sparrow.listener.SparrowRequestListener</listener-class></listener>

在这里插入图片描述

HttpSessionAttributeListener

package com.sparrow.listener;import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;/**
* @Author: 诉衷情の麻雀
* @Description: TODO
* @DateTime: 2023/7/18 20:26
**/
public class SparrowHttpSessionAttributeListener implements HttpSessionAttributeListener {@Overridepublic void attributeAdded(HttpSessionBindingEvent se) {System.out.println("SparrowHttpSessionAttributeListener 监听到session添加属性了" + se.getName() + "=" + se.getValue() );}@Overridepublic void attributeRemoved(HttpSessionBindingEvent se) {System.out.println("SparrowHttpSessionAttributeListener 监听到session删除属性了" + se.getName());}@Overridepublic void attributeReplaced(HttpSessionBindingEvent se) {System.out.println("SparrowHttpSessionAttributeListener 监听到session修改属性了" + se.getName() + "=" + se.getValue() );}
}

在这里插入图片描述

ServletRequestListener监听器

作用:监听Request对象的创建和销毁
常用于监控某个IP访问网站频率/用户访问的页面、资源(日志)

public class SparrowRequestListener implements ServletRequestListener {@Overridepublic void requestInitialized(ServletRequestEvent sre) {System.out.println("监听到request对象创建");ServletRequest servletRequest = sre.getServletRequest();System.out.println("访问IP=" + servletRequest.getRemoteAddr());System.out.println("访问的资源=" + ((HttpServletRequest) servletRequest).getRequestURL());}@Overridepublic void requestDestroyed(ServletRequestEvent sre) {System.out.println("监听到request对象被销毁");}
}

在这里插入图片描述

ServletRequestAttributeListener监听器

作用:监听Request属性变化

public class SparrowRequestAttributeListener implements ServletRequestAttributeListener {@Overridepublic void attributeAdded(ServletRequestAttributeEvent srae) {}@Overridepublic void attributeRemoved(ServletRequestAttributeEvent srae) {ServletRequestAttributeListener.super.attributeRemoved(srae);}@Overridepublic void attributeReplaced(ServletRequestAttributeEvent srae) {ServletRequestAttributeListener.super.attributeReplaced(srae);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OLED拼接屏采购指南:如何选择最佳方案?

OLED拼接屏作为一种创新的大屏幕显示设备&#xff0c;正在成为各行各业信息展示和传播的重要工具。 然而&#xff0c;面对市场上众多的品牌和型号&#xff0c;如何选择最佳的OLED拼接屏方案成为一项关键任务。 本文将为您提供一份全面且实用的OLED拼接屏采购指南&#xff0c;…

.NET Native AOT的静态库与动态库

.NET不仅可以使用 C静态库与动态库&#xff0c;也可以将.NET实现的函数导出为C静态库与动态库。在没有Native Aot之前&#xff0c;.NET只能通过P/Invoke享受C/C生态&#xff0c;而在Native Aot之后&#xff0c;不仅可以享受这些生态&#xff0c;还可以开发SDK供其他语言调用。 …

蓝桥杯上岸每日N题第二期(一)!!!

大家好 我是寸铁&#x1f4aa; 考前需要刷大量真题,大家一起相互监督&#xff0c;每日做N题&#xff0c;一起上岸吧✌️ ~ 冲刺蓝桥杯省一模板大全来啦 &#x1f4a5; ~ 蓝桥杯4月8号就要开始了 &#x1f64f; ~ 还没背熟模板的伙伴们背起来 &#x1f4aa; &#x1f4aa; &…

Sql Server类型转换,Sql Server函数

CONVERT(数据类型, 表达式, 样式) --样式可以没有 CAST(表达式 as 数据类型) select StudentName 的出生日期是&#xff1a; cast(DateOfBirth as varchar(50)) as 学生信息 from Students; select StudentName 的出生日期是&#xff1a; convert(varchar(50), DateOfB…

WAIC2023会后记

听了3天WAIC的会&#xff0c; 大开眼界&#xff0c;算是上了堂大课。 本次参会的目的是听听AI企业信息化的想法、理论和实践。以进一步探索可能的业务场景。三天的会结束后&#xff0c;留下深刻印象的有如下几点。 大模型当道 2023这次大会的主题成了大模型&#xff0c;谈的…

基于单片机电子密码锁射频卡识别指纹门禁密码锁系统的设计与实现

功能介绍 通过指纹进行开锁或者是按键输入当前的密码&#xff0c;修改密码&#xff0c;对IC卡可以进行注册&#xff0c;删除。当有RFID卡进入到读卡器的读卡范围内时&#xff0c;则会自动读取卡序列号&#xff0c;单片机根据卡的序列号对卡进行判断。若该卡是有效卡&#xff0c…

SparkStreaming

SparkStreaming第一次运行时不丢失数据 auto.offset.reset earliest Kafka和SparkStreaming整合时&#xff1a; 注意&#xff1a;和SparkStreaming整合时&#xff0c;上面的可选参数是无效的&#xff0c;只有两个可选参数&#xff1a; smallest&#xff1a;简单理解为从头开…

RabbitMQ安装

这里写目录标题 简介下载ELANG安装ELang配置环境变量安装RabbitMQ 简介 RabbitMQ 是一个开源的遵循 AMQP 协议实现的基于 Erlang语言编写&#xff0c;**即需要先安装部署Erlang环境再安装RabbitMQ环境。**需加注意的是&#xff0c;读者若不想跟着我的版本号下载安装&#xff0…

MacBook Java开发环境搭建记录

一、Homebrew的镜像设置 对于Java JDK的安装&#xff0c;我们更推荐使用Homebrew来进行安装管理。但Homebrew的curl国外源的下载速度实在是一言难尽&#xff0c;时常还会发生无法访问的情况。 那么我们此时的解决方法就有两种了&#xff0c;第一种便是使用全局的VPN代理进行下载…

让你不再疑惑加水印用什么软件

每个人都有自己的独特创意和作品&#xff0c;而在现今互联网时代&#xff0c;分享和传播作品已成为一种普遍现象。然而&#xff0c;随着互联网的发展&#xff0c;越来越多的作品被人恶意盗用和复制&#xff0c;使得原创作者的权益受到了侵害。为了保护自己的作品&#xff0c;加…

【SpringBoot】从零开始封装自己的starter并且引入到其他项目中使用

从零开始封装自己的starter并且引入到其他项目中使用 简介 本文将介绍如何从零开始封装自己的starter并且引入到其他项目中使用 为什么要自己封装starter&#xff1f; 这样可以对spring以及其他第三方提供的starter做二次封装或者封装一些自己需要的内容提供给其他项目使用&…

MySQL五种约束类型(普通 /自增主键,外键等) + 进阶查询(聚合查询,内 /外连接查询,自连接查询,子查询,合并查询)

文章目录 前言一、五种约束NOT NULL 约束UNIQUE 约束DEFAULT 约束PRIMARY KEY 主键约束(重点)普通主键自增主键 FOREIGN KEY 外键约束(重点) 二、进阶查询聚合查询聚合函数GROUP BY子句HAVING 联合查询笛卡尔积内连接外连接自连接子查询单行子查询&#xff1a;返回一行记录的子…

乔云监控tf卡格式化后数据恢复方法

您有没有使用过乔云牌监控设备呢&#xff1f;它通常里面会放置一个TF卡以存储录像&#xff0c;而TF卡长期高温高速运行&#xff0c;容易产生碎片&#xff0c;因此很多商家会建议大家一个月进行一次格式化。但是格式化后您有没有后悔过呢&#xff1f;在这个篇文章中&#xff0c;…

【Python】类型注解 ③ ( 使用 # type: 类型 注释方式设置类型注解 | 类型注解是提示性而非强制性 )

文章目录 一、使用 注释语法 设置 类型注解1、使用 注释语法 设置 类型注解语法介绍2、为 基础类型变量 设置 " 类型注解 "3、为 类 的 对象类型 设置 " 类型注解 "4、为 基础容器类型变量 设置 简易 " 类型注解 "5、为 基础容器类型变量 设置 详…

基于深度学习的高精度工人安全帽检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度工人安全帽检测识别系统可用于日常生活中或野外来检测与定位工人安全帽目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的工人安全帽目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用…

67、Redis线程模型,单线程快的原因

Redis线程模型&#xff0c;单线程快的原因 一、Redis线程模型二、单线程快的原因 一、Redis线程模型 Redis基于Reactor模式开发了网络事件处理器&#xff0c;这个处理器叫做文件事件处理器file event handler。这个文件事件处理器&#xff0c;它是单线程的&#xff0c;所以 Re…

Windows与Linux取证分析

目录 一、电子数据取证基本概念 1.电子取证学 2.常规取证 3.洛卡德物质交换原理 4.电子数据范围 5.电子数据取证的概念和目的 6.电子数据取证过程 二、Linux系统取证 1.基本信息获取 &#xff08;1&#xff09;获取系统基础信息 &#xff08;2&#xff09;用户/用户…

共筑开源新长城 龙蜥社区走进开放原子校源行-清华大学站

6 月 28 日&#xff0c;以“聚缘于校&#xff0c;开源共行”为主题的 2023 年开放原子校源行活动在清华大学成功举行。本次活动由开放原子开源基金会和清华大学共同主办&#xff0c;来自各行业的 22 位大咖共聚校园共话开源。龙蜥社区技术专家边子政受邀进行技术分享&#xff0…

UWB天线设计之一种优化扁平超宽带单极的新方法

文章亮点 一种新颖的方法提出了扁平超宽带单极天线。 通过应用收缩,可以设计具有相同性能的更小的天线作为平面单极天线。 优化结果表明该方法能够设计非常小的天线。 在这项研究中,提出了一种优化扁平超宽带单极天线的新方法。在该方法中,一般性地描述了天线的形状。这种一…

Vue+element table+原生js +touch触摸事件实现移动端横向拖动

Vueelement table原生js touch触摸事件实现移动端横向拖动 今天做移动端项目时&#xff0c;想加个表格展示数据&#xff0c;但是调试的时候发现&#xff0c;表格数据很多时&#xff0c;想要触屏左右滑动内容&#xff0c;但是滑动不了&#xff0c;又不想引用插件实现&#xff0c…