Java中监听器Listener详解

 更新时间:2023年08月01日 11:56:40   作者:Zero摄氏度  
Listener是由Java编写的WEB组件,主要完成对内置对象状态的变化 (创建、销毁)和属性的变化进行监听,做进一步的处理,主要对session和application内置对象监听,这篇文章主要介绍了Java中监听器Listener,需要的朋友可以参考下

1、Listener

  • 是由Java编写的WEB组件,主要完成对内置对象状态的变化 (创建、销毁)和属性的变化 进行监听,做进一步的处理
  • 作用:主要对session和application内置对象监听。

2、对application监听

package cn.mldn.lxh.listener ;
import javax.servlet.* ;
public class ServletContextDemo
	implements ServletContextListener,ServletContextAttributeListener
{
	private ServletContext application = null ;
	// 实现方法
	public void contextInitialized(ServletContextEvent sce)
	{
		this.application = sce.getServletContext() ;
		System.out.println("** 上下文初始化 ...") ;
		System.out.println("** 当前虚拟目录的绝对路径:"+this.application.getRealPath("/")) ;
	}
	public void contextDestroyed(ServletContextEvent sce)
	{
		System.out.println("** 上下文销毁 ...") ;
	}
	public void attributeAdded(ServletContextAttributeEvent scab)
	{
		System.out.println("** 增加属性:"+scab.getName()+" --> "+scab.getValue()) ;
	}
	public void attributeRemoved(ServletContextAttributeEvent scab)
	{
		System.out.println("** 删除属性:"+scab.getName()+" --> "+scab.getValue()) ;
	}
	public void attributeReplaced(ServletContextAttributeEvent scab)
	{
		System.out.println("** 替换属性:"+scab.getName()+" --> "+scab.getValue()) ;
	}
};
/*
  <listener>
	<listener-class>cn.mldn.lxh.listener.ServletContextDemo</listener-class>
  </listener>
*/

1、语法 :

  • 是WEB组件,一定要有包声明 package cn.mldn.lxh.listener ;
  • 包导入 javax.servlet
  • 实现接口 ServletContextListener ,ServletContextAttributeListener
  • 实现接口的方法

2、实现方法

实现的两个接口,一个是为了实现对application状态监听的方法,一个是为了实现对applciation属性的变化监听的方法。如下:

  • 对applicaiton的状态做监听 implements ServletContextListener ,实现两个方法:
public void contextInitialized(ServletContextEvent sce);

tomcat一启动,先创建出监听器,对application的创建和销毁做监听。当application一创建,被监听器监听到,就调用contextInitialized()方法;

public void contextDestroyed(ServletContextEvent sce);

当application一销毁,监听器就会监听到applicaiton销毁,调用contextDestoryed();

对applicaiton里属性的变化做监听 , implements ServletContextAttributeListener

public void attributeAdded(ServletContextAttributeEvent scab)
public void attributeRemoved(ServletContextAttributeEvent scab)
public void attributeReplaced(ServletContextAttributeEvent scab)

通过实现ServletContextAttributeListener 的三个方法,对applcation的属性变化做监听。注意:监听到的都是已经完成的变化 。比如往application里设值属性、删除属性、替换属性值等,这些都会被监听器监听到。可以通过方法获得增加的属性名和属性值,获得删除的属性名和属性值,获得替换的属性名和替换前的属性值(是被替换的,而不是替换后的值)

3、Tomcat一启动,创建了哪些内置对象?

  • tomcat一启动,首先会创建监听器,去监听内置对象的状态和属性变化。
  • 然后会创建Config对象,来收集配置文件中的初始参数,一共有会创建两个Config对象,分别是封装Servlet初始参数的ServletConfig,封装Filter初始参数的FilterConfig。
  • 然后会创建applicaiton对象
  • 然后创建Filter
  • 如果配了loadonstartup,就再创建servlet。

3、对session做监听

package cn.mldn.lxh.listener ;
import javax.servlet.http.* ;
public class HttpSessionDemo 
	implements HttpSessionListener,HttpSessionAttributeListener
{
	private HttpSession session ;
	// 实现方法
	public void sessionCreated(HttpSessionEvent se)
	{
		this.session = se.getSession() ;
		System.out.println("** Session 创建 ....") ;
		System.out.println("** SessionID --> "+this.session.getId()) ;
	}
	public void sessionDestroyed(HttpSessionEvent se)
	{
		System.out.println("** Session 销毁 ....") ;
	}
	public void attributeAdded(HttpSessionBindingEvent se)
	{
		System.out.println("** Session 增加属性:"+se.getName()+" --> "+se.getValue()) ;
	    System.out.println("** 获得Session "+se.getSession().getId()) ;
	}
	public void attributeRemoved(HttpSessionBindingEvent se)
	{
		System.out.println("** Session 删除属性:"+se.getName()+" --> "+se.getValue()) ;
	}
	public void attributeReplaced(HttpSessionBindingEvent se)
	{
		System.out.println("** Session 替换属性:"+se.getName()+" --> "+se.getValue()) ;
	}
};
/*
  <listener>
	<listener-class>cn.mldn.lxh.listener.HttpSessionDemo</listener-class>
  </listener>
*/

包声明包导入类声明,实现 HttpSessionListener接口,实现对状态监听的方法实现HttpSessionAttributeListener接口,实现对属性变化监听的方法

什么时候创建session?

我们可以通过public void sessionCreated(HttpSessionEvent se) 来监听session的创建

  • 访问服务器不会
  • 访问静态组件不会(html)
  • 只有访问动态组件(jsp),才会创建请求—第一次发送请求

到此这篇关于Java中监听器Listener详解的文章就介绍到这了,更多相关java 监听器Listener内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java数据结构之List的使用总结

    Java数据结构之List的使用总结

    List是Java中比较常用的集合类,指一系列存储数据的接口和类,可以解决复杂的数据存储问题,本文就来拿实际案例总结介绍一下List的使用方法,感兴趣的朋友快来看看吧
    2021-11-11
  • Java排序算法之桶排序算法解析

    Java排序算法之桶排序算法解析

    这篇文章主要介绍了Java排序算法之桶排序算法解析,桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作原理是将数组分到有限数量的桶子里,每个桶子再个别排序,有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序,需要的朋友可以参考下
    2023-10-10
  • javaweb实现app扫码登录功能

    javaweb实现app扫码登录功能

    这篇文章主要为大家详细介绍了javaweb实现app扫码登录功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • SpringBoot集成EasyExcel的步骤

    SpringBoot集成EasyExcel的步骤

    EasyExcel是阿里巴巴开源poi插件之一,主要解决了poi框架使用复杂,sax解析模式不容易操作,数据量大起来容易OOM,解决了POI并发造成的报错。主要解决方式:通过解压文件的方式加载,一行一行的加载,并且抛弃样式字体等不重要的数据,降低内存的占用。
    2021-06-06
  • Java并发编程this逃逸问题总结

    Java并发编程this逃逸问题总结

    本篇文章给大家详细分析了Java并发编程this逃逸的问题分享,对此有需要的朋友参考下。
    2018-02-02
  • springboot中使用Feign整合nacos,gateway进行微服务之间的调用方法

    springboot中使用Feign整合nacos,gateway进行微服务之间的调用方法

    这篇文章主要介绍了springboot中使用Feign整合nacos,gateway进行微服务之间的调用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Spring高级注解@PropertySource详细解读

    Spring高级注解@PropertySource详细解读

    这篇文章主要介绍了Spring高级注解@PropertySource详细解读,@PropertySource注解用于指定资源文件读取的位置,它不仅能读取properties文件,也能读取xml文件,并且通过YAML解析器,配合自定义PropertySourceFactory实现解析yaml文件,需要的朋友可以参考下
    2023-11-11
  • Java后端实现生成验证码图片的示例代码

    Java后端实现生成验证码图片的示例代码

    验证码是一种用于验证用户身份或确保用户操作安全的技术手段,通常以图形、声音或文字的形式出现,本文主要介绍了如何通过java实现生成验证码图片,需要的可以参考下
    2023-12-12
  • Java关键字、标识符、常量、变量语法详解

    Java关键字、标识符、常量、变量语法详解

    这篇文章主要为大家详细介绍了Java关键字、标识符、常量、变量等基础语法,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • SpringBoot项目集成Swagger和swagger-bootstrap-ui及常用注解解读

    SpringBoot项目集成Swagger和swagger-bootstrap-ui及常用注解解读

    这篇文章主要介绍了SpringBoot项目集成Swagger和swagger-bootstrap-ui及常用注解解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03

最新评论