监听器详解与实例演练

Linux下Oracle实例与监听器启停实战详解 数据库服务的高可用与快速恢复,是运维和DBA日常工作的核心关注点。在Linux环境下,Oracle数据库的启动与关闭并非单一命令,而是涉及实例、监听器及文件系统多个层面的协同过程。理解startup/shutdown的状态机,以及lsnrctl对监听器的管理逻辑,能有效避免ORA-01034、ORA-12514等常见故障。实例与监听器的启动顺序、环境变量ORACLE_SID的配置、动态注册机制,都是影响服务可连接性的关键因素。掌握这些原理,不仅适用于单机环境,也能为生产环境中的变更操作和故障排查提供可复用的 阅读详情

   创建监听器时,只要创建一个实现监听器接口的java类即可

监听器接口有ServletContextListener,HttpSessionListener,HttpSessionBindingListener,ServletRequestListener等接口,下面那进行详细解读



在Servlet3.0中,有两种方法创建


@webListener

public class ListenerClass implements ListenerInterface(){

}


第二种方法时在web.xml部署描述符中使用一个listener元素

</listener>

<listener-class>listener class name</listener-class>

</listener>


一,Servlet Context监听器


ServletContext有两个监听器:ServletContextListener和ServletContextAttributeListener


1ServletContextListener会对ServletContext的初始化和解构做出响应,下面通过一个实例来演示,

一旦ServletContext被初始化,它会将属性map保存在ServletContext属性中

import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class AppListener implements ServletContextListener {

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		// TODO Auto-generated method stub

	}

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		// TODO Auto-generated method stub
		ServletContext servletContext=sce.getServletContext();
		
		Map<String, String> countries=new HashMap<String, String>();
		countries.put("ca", "Canada");
		countries.put("cn", "China");
		servletContext.setAttribute("countries", countries);

	}

}

2,ServletContextAttributeListener

   每当ServletContext中添加,删除,替换了某个属性,ServletContextAttributeListener分别

会运行  void attributeAdded(ServletContextAttributeEvent event)

             void attributeRemoved(ServletContextAttributeEvent event)

             void attributeReplaced(ServletContextAttributeEvent event)方法


ServletContextAttributeEvent类派生与ServletContetAttribute,并添加了下面两个方法


java.lang.String getName()

java.lang.Object getValue()



二,Session监听器

1,HttpSessionListener

当有httpSession被创建或者销毁,Servlet容器就会调用所有已注册的HttpSessionListener


下面通过一个十分实用的例子来演示,用了一个AtomicInteger作为计数器,并保存为ServletContext属性

每当创建HttpSession时,这个计数器就会递增,每当销毁HttpSession时,计数器就会递减,可以用于显示在线人数

import java.util.concurrent.atomic.AtomicInteger;
import javax.print.attribute.standard.Severity;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
@WebListener
public class SessionListener implements HttpSessionListener,
		ServletContextListener {
	int userCount;

	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		// TODO Auto-generated method stub
		ServletContext servletContext=arg0.getServletContext();
		servletContext.setAttribute("userCounter", new AtomicInteger());

	}

	@Override
	public void sessionCreated(HttpSessionEvent arg0) {
		// TODO Auto-generated method stub
		HttpSession session=arg0.getSession();
		ServletContext servletContext=session.getServletContext();
		AtomicInteger userCounter= (AtomicInteger) servletContext.
				getAttribute("userCounter");
		int userCount=userCounter.incrementAndGet();
		System.out.println("userCount incremented to :"+userCount);

	}

	@Override
	public void sessionDestroyed(HttpSessionEvent arg0) {
		// TODO Auto-generated method stub
		HttpSession session=arg0.getSession();
		ServletContext servletContext=session.getServletContext();
		AtomicInteger userCounter= (AtomicInteger) servletContext.
				getAttribute("userCounter");
		int userCount=userCounter.decrementAndGet();
		System.out.println("userCount incremented to :"+userCount);

	}

}

2,HttpSessionBindingListener

当HttpSessionBindingListener绑定到HttpSession,或者解除绑定时,都会收到通知



3,HttpSessionAttributeListener 

当HttpSession中有添加,删除,替换属性的时候它才会被调用,如ServletContextAttributeListener中一样


4,HttpSessionActivationListener

在分布式中,多个Servlet容器会被配置成可伸缩的,为了节省内存,Servlet容器可以对session属性进行迁移或者序列化。

一般来说,当内存比较时,相对较少访问的对象可以序列化到备用设备中,这个接口定义了两个方法

 

void sessionDidActive(HttpSessionEvent event)

void sessionWillPassivate(HttpSessionEvent event)



三,ServletRequest监听器

ServletRequestListener对ServletRequest的创建和销毁做出响应


下面通过一个实例,来计算完成一个HTTP请求要花费的时间。通过比较运行requestInitiallized 和requestDestroyed

方法中间所隔的时间差,得知完成一个HTTP所花的时间

import javax.servlet.ServletRequest;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpServletRequest;
@WebListener
public class PerfStatListener implements ServletRequestListener {

	@Override
	public void requestDestroyed(ServletRequestEvent arg0) {
		// TODO Auto-generated method stub
		ServletRequest servletRequest=arg0.getServletRequest();
		long start=(Long) servletRequest.getAttribute("start");
//nanoTime方法返回一个表示任意时间的long,在同一台JVM得到两个返回值可以用于所间隔的时间差
		long end=System.nanoTime();
		HttpServletRequest httpServletRequest=(HttpServletRequest)
				arg0.getServletRequest();
		String url=httpServletRequest.getRequestURI();
		System.out.println("time taken to execute"+url+":"+
		(end-start)/1000+" microseconds");

	}

	@Override
	public void requestInitialized(ServletRequestEvent arg0) {
		// TODO Auto-generated method stub
		ServletRequest servletRequest=arg0.getServletRequest();
		servletRequest.setAttribute("start", System.nanoTime());

	}

}

Veeam备份Oracle实例配置指南:从RMAN到恢复演练的完整链路 数据库备份的关键不只是复制文件,而在于是否能为数据提供一致性恢复点。Oracle通过重做日志与归档日志记录每一次事务,只有将物理快照与日志序列对齐,才能实现真正的时间点恢复(PITR)。Veeam Backup & Replication通过接管RMAN调度与备份集管理,以SBT接口将Oracle备份流式写入集中仓库,同时支持增量与日志备份联动,将恢复精度推进到分钟级。本文从环境准备、作业配置、保留策略设计,到Veeam Explorer for Oracle的恢复演练,梳理了生产环境中备份Oracle实例 阅读详情

相关推荐

Cobalt Strike实战指南:从环境搭建到红队攻防演练

在网络安全领域,渗透测试和红队演练是评估企业防御能力的关键手段。其核心原理是通过模拟真实攻击者的行为,发现系统漏洞和防御薄弱环节。这项技术的价值在于主动识别风险,提升整体安全防护水平,广泛应用于企业安全评估、攻防演练和应急响应等场景。其中,Cobalt Strike作为一款集成了前期侦察、漏洞利用、横向移动和权限维持的综合性攻击模拟平台,已成为红队演练的重要工具。本文将聚焦于Cobalt Strike的基础使用,涵盖环境搭建、监听器配置、攻击载荷生成以及会话管理等核心操作,帮助读者快速掌握这一强大工具的基础

weixin_42533120的博客 273

通过实例深入理解监听器

通过实例深入理解监听器一、什么是监听器二、监听器要素三、实现步骤四、实例1.场景描述2.代码实现1)定义监听器接口2)监听者、被监听者3)创建事件对象4)实现监听器接口,分别创建监听者、被监听者的监听实例5)在监听者内部创建触发行为6.)在被监听者内部创建响应行为7)创建测试用例3.功能扩展1)定义监听器接口2)监听者、被监听者3)创建事件对象4)实现监听器接口,创建监听实例5)在监听者内部创建触发行为6.)在被监听者内部创建响应行为7)创建测试用例五、文末 之前写过一个简单监听器的实例文章,想要了解的,可

Ason Blogs 892

实战演练:从CS到MSF的会话流转与协同作战

本文详细介绍了从Cobalt Strike(CS)到Metasploit Framework(MSF)的会话流转与协同作战实战演练。通过环境搭建、监听器配置、会话委派及网络排错等关键步骤,帮助安全测试人员掌握高效的渗透测试技术,提升红队演练中的攻击链路打通能力。

weixin_42525289的博客 219

listener监听器实战

Java监听器的具体实战实现

qq644266189的博客 753

ORA-12537深度解析:监听器主动断连的四大根因与实战诊断

Oracle连接错误ORA-12537并非网络层连接失败,而是监听器在完成TCP握手和服务注册后,于实例健康校验阶段主动关闭连接的技术现象。其本质是监听器与数据库实例(特别是PMON进程)之间的IPC或TCP健康检查失败,触发service_deregister行为。该错误凸显了监听器作为‘调度员’而非简单端口转发器的角色定位,技术价值在于推动DBA从静态配置排查转向动态交互验证。典型应用场景包括数据库升级、灾备切换、云环境迁移及高并发资源耗尽等生产环境。本文聚焦ORA-12537这一高频故障,结合serv

weixin_32306957的博客 109

Cobalt Strike实战:从生成Payload到主机上线的完整攻防演练(附命令详解)

本文详细介绍了Cobalt Strike在渗透测试中的实战应用,从监听器配置、Payload生成到主机上线的完整攻防演练。通过具体命令解析和技巧分享,帮助安全人员掌握红队评估的核心技术,提升对抗能力。

weixin_30314793的博客 388

Java ---Listener监听器

在我们的web容器中,一直不断的触发着各种事件,例如:web应用启动和关闭,request请求到达和结束等。但是这些事件通常对于开发者来说是透明的,我们可以根据这些接口开发符合我们自身需求的功能。在web中常见的的几个监听事件如下: ServletContextListener:用于监听web应用的启动和关闭 ServletContextAttributeListener:用于监听在applic...

weixin_30488313的博客 260

Cobalt Strike汉化版——从零搭建红队攻防演练环境

本文详细介绍了Cobalt Strike汉化版的安装与使用教程,从基础认知到环境搭建、核心功能解析及红队作战实战案例,帮助安全人员快速掌握这一强大的红队攻防工具。特别强调了汉化版的中文界面优化及安全使用建议,适合国内安全团队进行攻防演练。

weixin_29250403的博客 393

[5]云计算概念、技术与架构Thomas Erl-第8章上 特殊云机制[week7]

典型的云技术架构包括大量灵活的部分,这些部分应对IT资源和解决方案的不同使用要求。本篇文章介绍的每种机制都完成一个特定的运行时功能,来支持一个或多个云特性。自动伸缩监听器负载均衡器SLA监控器按使用付费监控器审计监控器故障转移系统虚拟机监控器资源集群多设备代理状态管理数据库可以把上述特殊云机制看作对基础设施的扩展,它们能以多种方式组合为不同的和定制的技术架构的一部分!

m0_57656758的博客 2645

java一个监听器的例子

java一个监听器的例子

高速PCB差分对布线仿真实战案例

差分对布线是高速PCB设计的关键环节,直接影响信号完整性与EMI性能。本文结合实际项目,详解等长控制、阻抗匹配、间距优化等核心技巧,并通过仿真工具验证眼图、串扰和时序裕量,助力工程师规避常见高速pcb设计陷阱。

weixin_29092787的博客 349

认识监听器(Listener)

监听器(Listener)是一种运行在后台的程序,它主要用于监控某些事件在系统中的发生,并且根据这些事件做一些特定的处理。在Web应用程序中,监听器可以观察ServletContext、HttpSession以及ServletRequest等对象的变化,以便于在这些对象变化时进行相应的处理。除了上述标准的监听器,开发者也可以自定义监听器来监听特定的事件,这也是监听器的优秀之处。监听器的主要用途是监控Web应用程序中某些特定的事件的发生,并在这些事件发生时执行预定义的操作或处理逻辑。

m0_71461928的博客 3021

10.2 构网型变流器引发的次同步振荡与宽频振荡问题:机理分析与抑制技术

随着构网型变流器在新型电力系统中的规模化部署,其作为电压源主动支撑电网的能力得到验证的同时,也引发了一系列前所未有的稳定性问题。传统的同步发电机主导的电力系统中,振荡模式主要集中于**低频区间**。然而,构网型变流器通过快速数字控制实现的虚拟同步、惯性响应等先进功能,其控制环路动态与电网阻抗、其他电力电子设备之间产生了复杂的交互作用。这种交互不仅可能诱发经典的**次同步振荡**,更可能催生频率范围从数赫兹到数百赫兹甚至上千赫兹的**宽频振荡**。

技术工作者 1306

Oracle ADG + Keepalived 切换演练

客户的一套生产环境采用的架构是Oracle ADG + Keepalived,近期需要进行切换演练,要求我这边保障。ADG本身切换倒没啥可说的,但引入keepalived软件,就需要提前研究下这个架构。其实看了下环境配置,整体思路也非常简单,说白了就是利用keepalived软件引入一个VIP,应用侧只需配置连接这个VIP即可。 依据当前生产环境架构模拟了一套自己的测试环境。 1.Keepalived相关配置 2.ADG手工切换步骤 3.VIP和监听的关系 1.Keepalived相关配置 关于Ke

sqlora的专栏 1239

针对中文CLIP模型训练失效的解决方案记录

解决了中文CLIP模型无法正确训练的问题

weixin_45906434的博客 1621

MATLAB - 使用 RRT 进行挖掘机运动规划

本例演示了如何使用运动规划器在包含障碍物的环境中为挖掘机规划路径。在此示例中,您将以运动树的简化形式为挖掘机建模,然后使用基于采样的运动规划器确定挖掘机在存在障碍物的两个姿势之间的可行路径。在 Simscape™ 多体™ 模型中模拟结果。

机器人控制与仿真应用 1850

RAC容灾演练

RAC容灾演练:在节点一进行验证:步骤 操作命令关闭步骤 检测RAC集群资源状态 crsctl status resource -t 关闭监听 srvctl stop listener -n <node_name> 关闭数据库实例 srvctl stop instance -d <...

weixin_33853794的博客 240

R语言Rstudio突然无法启动且报错:ERROR system error 42 [str: 一, len: 3, from: UTF-8, to: ISO8859-1]...如何解决

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 2848

【详细学习SpringBoot源码之自定义监听器实战演练-6(自定义监听器、自定义监听事件、指定监听事件)】

【详细学习SpringBoot源码之自定义监听器实战演练-6(自定义监听器、自定义监听事件、指定监听事件)】上一篇文章我们详细的学习了SpringBoot中的监听器机制,清楚的知道了SpringBoot中默认给我们提供了多个监听器,提供了一个默认的事件发布器,还有很多默认的事件,接下里我们就在前面的基础上来自定义实现一个监听器。如果我们想要通过自定义的监听器来监听自定义的事件呢?我们就需要在之前自定义监听器的基础上,再创建自定义的事件类,只需要继承ApplicationEvent。

Coder_ljw的博客 757

YOLOv11 | 一文带你深入理解ultralytics最新作品yolov11的创新 | 训练、推理、验证、导出 (附网络结构图)

ultralytics发布了最新的作品YOLOv11,这一次YOLOv11的变化相对于ultralytics公司的上一代作品YOLOv8变化还是很大的(YOLOv9、YOLOv10均不是ultralytics公司作品),其中改变的位置涉及到C2f变为C3K2,在SPPF后面加了一层类似于注意力机制的C2PSA,还有一个变化大家从yaml文件是看不出来的就是它的检测头内部替换了两个DWConv,在损失函数方面就没有变化了还是采用的CIoU作为边界框回归损失,下面带大家深入理解一下ultralytics最新作品

Snu77的博客 18万+

Android 13.0 开机启动优化之PMS扫描apk耗时相关功能优化

在android13.0的系统rom定制化开发中,在系统中开发产品时,会根据客户要求内置第三方app,这时如果内置app过多,或者安装的app过多,在系统开机的过程中 在pms扫描安装app的时候,就会比较耗时,这时候就需要优化下pms扫描安装app这块的功能代码,用多线程来实现pms扫描安装app,来加快开机时间,接下来 来实现这个功能

安卓兼职framework和app工程师的博客 1333

企业内网APT攻击模拟与防御能力测评——基于Cobalt Strike的全流程红队演练实践

本文以合规红队演练为背景,系统阐述了Cobalt Strike在企业内网渗透测试中的应用与工具对比。通过模拟APT攻击全流程(外网突破、内网横向移动、权限维持),验证企业防御体系有效性。研究显示:CS在隐蔽性、功能完备性方面表现最优(HTTPS Beacon未触发告警,SMB横向移动成功率100%),而Metasploit因特征明显更易被检测。同时提出企业应加强HTTPS流量深度检测、PowerShell日志审计等防御建议。所有测试均在授权环境下完成,严格遵循网络安全法规。

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 1086

GEE:耦合5个因子的kRSEI遥感生态指数(K Remote Sensing Ecological Index, KRSEI)计算

本文将介绍在 Google Earth Engine (GEE)平台上,如何耦合5个因子,进行 kRSEI 的计算。具体来说,分别计算了 `NDVI, WET, NDBSI,LST,NDRI` 5个因子,并使用 PCA 主成分分析方法计算了权重,最后,计算了 kRSEI 指数。

养乐多的博客 1415

Rshell实战指南:跨平台多协议C2框架在红队演练中的应用

本文深入解析了Rshell这一跨平台多协议C2框架在红队演练中的实战应用。从环境部署、多协议监听器配置,到客户端的生成投递与流量伪装,详细阐述了如何利用其跨平台特性与多协议支持,构建隐蔽、稳定的命令与控制通道,以应对复杂的对抗环境,提升红队行动的效率与成功率。

a0b1c2d3的专栏 563

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

红队演练终极指南:如何利用Merlin构建完整攻击链

Merlin是一款跨平台的后渗透测试命令与控制(C2)服务器和代理工具,专为红队演练和渗透测试设计。这款基于Go语言开发的开源工具提供了完整的攻击基础设施,帮助安全专家构建隐蔽、高效的攻击链。无论你是网络安全新手还是经验丰富的红队成员,Merlin都能为你提供强大的C2能力。🚀 ## 🎯 Merlin核心功能概览 Merlin支持多种C2通信协议,包括HTTP/1.1明文、HTTP/1.1

gitblog_00664的博客 696

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: JSP详解与实例
下一篇: 三个实例带你走进web过滤器Filter API
oldbig_lin
博客等级 码龄10年 78粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值