javaEE Listener, 监听器, ServletContextListener。监听域对象的创建/销毁

 servlet规范包括三个技术点:servlet  listener  filter
1、监听器有哪些(6+2个)?
第一维度:按照被监听的对象划分:ServletRequest域   HttpSession域   ServletContext域
第二维度:监听的内容分:监听域对象的创建与销毁的;监听域对象的属性变化的


2、监听器的编写步骤:
a.编写一个监听器类去实现监听器接口
b.覆盖监听器的方法
c.需要在web.xml中进行配置---注册


MyServletContextListener.java(自定义的监听器实现类,实现ServletContextListener接口):

package com.xxx.demo;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

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

public class MyServletContextListener implements ServletContextListener{

	@Override
	//监听ServletContext域对象的创建。  服务器启动时触发
	public void contextInitialized(ServletContextEvent sce) {
		//获取被监听的对象---ServletContext
		ServletContext servletContext = sce.getServletContext();
		//获取被监听的对象,是所有Listener通用的方法(返回Object类型)
		ServletContext source = (ServletContext) sce.getSource();
		System.out.println("context创建了....");
		
		// 可以开启一个定时任务
		Timer timer = new Timer();
		//参数1:任务;  参数2:第一次执行时间;  参数3:任务间隔时间(毫秒)
		timer.scheduleAtFixedRate(new TimerTask() {
			@Override
			public void run() {
				System.out.println("银行计息了.....");
			}
		} , new Date(), 5000); 
		
	}

	//监听ServletContext域对象的销毁。  服务器关闭时触发
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("context销毁了....");
		
	}

}
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>MyWeb</display-name>
  
  <!-- 注册监听器(相当于hook钩子) -->
  <listener>
  	<listener-class>com.xxx.demo.MyServletContextListener</listener-class>  <!-- 必须是全名 (反射实现) -->
  </listener>
  
</web-app>


猜你喜欢

转载自blog.csdn.net/houyanhua1/article/details/80919230
今日推荐