JavaWeb—监听器Listener
listener概述
什么是监听器?
Listener是用来监听域对象
什么是域对象?
HttpServletContext HtttpSession HttpRequest HttpPageContext
类比班主任监听同学的状态
监听器有哪些?
Listener监听域对象创建和销毁 生死
Listener监听域对象属性的变化 变化
有什么特点
没有监听地址
不同的对象使用不同的监听器
listener的使用
- idea创建监听器
- 类比 Servlet与Filter
代码案例:
Demo1Listener
package com.lbl.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
import java.util.Timer;
import java.util.TimerTask;
@WebListener()
public class Demo1Listener implements ServletContextListener{
public Demo1Listener() {
}
//这个方法用来监听ServletContext域的创建
/*
这个域:服务器启动时创建
*/
public void contextInitialized(ServletContextEvent sce) {
//设置一个定时器
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
try {
System.out.println("--定时发送邮件");
} catch (Exception e) {
e.printStackTrace();
}
}
}, 5000, 2000);
System.out.println("ServletContext域的创建啦");
}
//这个方法用来监听ServletContext域的销毁
/*
这个域:服务器关闭时销毁
*/
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContext域销毁啦");
}
}
运行效果:
##上面代码用到了计时器,顺便讲一下计时器Timer
看代码注释
计时器代码:
package com.lbl.listener;
import java.util.Timer;
import java.util.TimerTask;
public class TestDemo {
public static void main(String[] args) {
//要使用计时器,首先new一个计时器
Timer timer = new Timer();
//然后调用计时器的schedule方法,可以理解为设置计划
//该方法内有三个参数
//第一个参数是要传一个TimerTeak类,我下面直接new了一个匿名内部内,因为该类实现了runable接口,所以我要重写run方法
//第二个参数是延迟执行时间,如果不延时执行,则直接设置为0
//第三个参数为时间间隔,单位是毫秒
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("时间到了");
}
}, 5000,2000); //5秒之后执行run方法,每隔2秒再执行 run方法
}
}
运行效果: