监听器(Listener)的入门详解和使用方法

监听器的作用

  • Listener的作用对Web应用对象的行为进行监控。
  • 通过Listener监听自动触发指定功能代码。

这里Web应用对象通常指这三种:
ServletContext–对全局ServletContext及其属性进行监听
HttpSession–对用户会话及其属性操作进行监听
ServletRequest–对请求以及属性操作进行监听

在这些属性进行修改时,就会被监听器捕获,从而执行相应的功能代码。

开发监听器的三要素

  • 实现XxxLsitener接口,不同接口对应不同监听对象
  • 实现每个接口中独有的方法,实现触发监听的后续操作
  • 在web.xml中配置标签使监听器生效
实例操作

在这里我们实际操作一下(开发工具使用的Eclipse),首先创建一个Web工程,工程名为first-listener,在src文件夹中创建一个包,包名为com.sias.listener,在该包中创建一个类,类名为FirstListener。

项目的结构图
上图为我们的工程结构图,接下来我们将在FirstListener类中实现我们第一个监听器。

package com.imooc.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
//导入ServletContextListener监听器接口
public class FirstListener implements ServletContextListener{
	//重写监听器初始化方法
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		System.out.println("ServletContext已初始化");
	}
	//重写监听器销毁方法
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("ServletContext已销毁");
    }

}

此时我们监听器已经完成,接下来将监听器配置使用。

监听器的配置方法

  1. 监听器web.xml配置
 <listener>
      <listener-class>包名.类名 <listener-class>
 <listener>

2.监听器注释

@WebListener

个人建议对于像监听器这种全局变量建议在web.xml文件中配置。

实例操作
  1. 我们首先在web.xml文件中配置。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>first-listener</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <!-- Listener监听器配置语句 -->
  <listener>
    <listener-class>com.sias.listener.FirstListener</listener-class>
  </listener>
</web-app>

这时候我们就配置成功了。

接下来我们启动程序。接下来我们观察控制台。
输出语句:ServletContext已初始化
在这里我们可以看到在启动Tomcat服务器时,自动调用了监听器初始化方法contextInitialized(),在控制台打印出“ServletContext已初始化”。
在这里说明一下,ServletContext全局对象在应用启动时会自动初始化,而我们的监听器捕获到了ServletContext的初始化操作,所以就自动调用了监听器初始化方法,所以在控制台就输出了“ServletContext已初始化”。

接下来我们关闭服务器,观察控制塔台,发现调用了监听器的销毁方法输出“ServletContext已销毁”。
监听器销毁

2.接下来我们尝试用注释的方法配置监听器。
首先我们先要把web.xml中配置监听器的语句给注释掉,接下来,打开FirstListener类在里面添加 @WebListener注释。

package com.sias.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
//监听器注释
@WebListener
public class FirstListener implements ServletContextListener{
	//监听器初始化方法
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		System.out.println("ServletContext已初始化");
	}
	//监听器销毁方法
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("ServletContext已销毁");
    }
}

我们再次启动程序,发现控制台输出的语句跟配置web.xml的输出语句一模一样,这说明我们配置成功了。

在这里多提一嘴,过滤器和监听器的区别:
过滤器(Filter)的职责是对URL进行过滤拦截,是主动的执行
监听器(Listener)的职责是对Web对象进行监听,是被动触发

注:本篇文章仅个人见解,若有错误,欢迎指正!

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值