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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MyBatis实现动态SQL的方法

    MyBatis实现动态SQL的方法

    动态SQL是MyBatis强大特性之一,极大的简化我们拼装SQL的操作,本文主要介绍了MyBatis实现动态SQL的方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • Java模拟微信来电提醒示例

    Java模拟微信来电提醒示例

    这篇文章主要为大家介绍了Java模拟微信来电提醒示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Java解析方法的调用关系示例详解

    Java解析方法的调用关系示例详解

    这篇文章主要介绍了Java解析方法的调用关系,方法在Java编程中用于封装重复的代码,提高代码复用性,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • 详解Java集合类之HashSet篇

    详解Java集合类之HashSet篇

    这篇文章主要为大家详细介绍一下Java集合类中HashSet的用法,文中的示例代码讲解详细,对我们学习Java有一定帮助,感兴趣的可以了解一下
    2022-07-07
  • IDEA 中使用 Hudi的示例代码

    IDEA 中使用 Hudi的示例代码

    这篇文章主要介绍了IDEA 中使用 Hudi的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Java中执行docker命令的实现示例

    Java中执行docker命令的实现示例

    本文主要介绍了Java中执行docker命令的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • Java正则表达式的实例操作指南

    Java正则表达式的实例操作指南

    这篇文章主要给大家介绍了关于Java正则表达式的实例操作指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • SpringBoot如何优雅地使用Swagger2

    SpringBoot如何优雅地使用Swagger2

    这篇文章主要介绍了SpringBoot如何优雅地使用Swagger2,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Java中switch判断语句典型使用实例

    Java中switch判断语句典型使用实例

    这篇文章主要介绍了Java中switch判断语句典型使用实例,本文直接给出代码实例,在忘记switch语法时特别有用,复制修改即可使用,需要的朋友可以参考下
    2015-06-06
  • @DS注解的使用,动态数据源,事务详解

    @DS注解的使用,动态数据源,事务详解

    在项目中使用多数据源时,可以借助苞米豆的dynamic-datasource-spring-boot-starter进行配置,首先需引入相应的jar包,并在application.yml中设置主从数据源,其中一般选择master作为默认数据源,在实现类中通过@DS注解指定数据源
    2024-09-09

最新评论