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>