Tomcat之Listener&Filter

Tomcat之Listener&Filter

1.Listener详解

1.Listener介绍

监听器,监听某一个事件的发生或者某一个状态的改变,不论什么监听器的实现都是基于接口回调,监听器的内部机制就是接口回调。

2.监听器原理

没考虑回调的做法:

TestA.java

package com.nikehu.demo;

public class TestA {
   
	
	public void print(){
   
		for (int i = 0; i < 10; i++) {
   
			System.out.println("循环到了--"+i);
			if(i==5){
   
				System.out.println("循环到了5了,该通知TestB");
				TestB tb = new TestB();
				tb.printFive();
			}
		}
	}
}

TestB.java

package com.nikehu.demo;

public class TestB {
   

	public void printFive(){
   
		System.out.println("A已经循环到了5,所以TestB的这个方法将被调用");
	} 
}
接口回调

需求:A在执行循环,当A触发某一事件时或,某一状态改变时通知B;

实现先把某一个对象传递给A,当A触发某一条件时,通过这个对象来调用B中的方法。不是直接传递B的实例,而是床底一个接口的实例过去。不能直接new B(),也不能传一个B的实例,A和B之间借助接口去联系上

TestA.java

package com.nikehu.demo;

import com.nikehu.demo01.PrintListener;

public class TestA {
   
	
	
	public void print(PrintListener p){
   
		for (int i = 0; i < 10; i++) {
   
			System.out.println("循环到了--"+i);
			if(i==5){
   
				System.out.println("循环到了5了,该通知监听器了");
				p.print();
			}
		}
	}
}

PrintListener.java

package com.nikehu.demo01;
/**
 * 打印监视器
 * @author 猪猪
 *	1988
 */
public interface PrintListener {
   
	/**
	 * 一旦触发某一条件就调用这个方法
	 */
	void print();
}

TestB.java

package com.nikehu.demo;

import com.nikehu.demo01.PrintListener;

public class TestB implements PrintListener{
   

	public void printFive(){
   
		System.out.println("A已经循环到了5,所以TestB的这个方法将被调用");
	}

	@Override
	public void print() {
   
		System.out.println("A已经循环到了5,所以TestB的这个方法将被调用");
		
	} 
}

Test01.java

package com.nikehu.demo;

import org.junit.Test;

import com.nikehu.demo01.PrintListener;

public class Test01 {
   
	
	@Test
	public void test01(){
   
		TestA ta = new TestA();
		ta.print(new TestB());
	}
	@Test
	public void test02(){
   
		TestA ta = new TestA();
		ta.print(new PrintListener(){
   

			@Override
			public void print() {
   
				System.out.println("匿名内部类实现了Printlistener这个接口");				
			}			
		});
	}
}

Web监听器总共有8个,可以划分成三种各类型:

第一种:监听三个作用域创建和销毁

第二种:监听三个作用域属性状态变更

第三种:监听HttpSession里面存值的状态变更

3.Listener监听三个作用域创建和销毁

作用域:pageContext,request,session,application

监听的是:

request,—HttpServletRequest—ServletRequestListener

session,—HttpSession—HttpSessionListener

application —ServletContext—ServletContextListener

ServletContext:

1.启动服务器的时候创建

2.关闭服务器或项目从服务器移除的时候销毁

如何注册监听器:

1.定义一个类实现接口

package com.nike.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyServletContextListener implements ServletContextListener{
   

	public void contextInitialized(ServletContextEvent sce) {
   
		System.out.println("ServletContextListener初始化了");
		
	}

	public void contextDestroyed(ServletContextEvent sce) {
   
		System.out.println("ServletContextListener销毁了");
		
	}
}

2.注册|配置监听器

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>listener01</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>
    <
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值