1public abstract interface javax.servlet.ServletContextListener extends java.util.EventListener 。此类继承java的事件处理类EventListener, ServletContextListener有两个抽象方法。分别是:
Apublic abstract void contextInitialized(javax.servlet.ServletContextEvent arg0);// 当web服务器启动的时候启动此方法
Bpublic abstract void contextDestroyed(javax.servlet.ServletContextEvent arg0);//当web服务器关闭的时候调用此方法,(但我在测试的时候却看不到它的调用)。
2假如我们像在web服务启动或则关闭的时候做一些事情,那么只需要写一个类实现ServletContextListener接口就可以了。
3一般会做定时的处理之类的操作,就要用到Timer :一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行。
Timer () 创建一个新计时器。 |
Timer (boolean isDaemon) 创建一个新计时器,可以指定其相关的线程作为守护程序运行。 |
Timer (String name) 创建一个新计时器,其相关的线程具有指定的名称。 |
Timer (String name, boolean isDaemon) 创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行 |
void |
cancel () 终止此计时器,丢弃所有当前已安排的任务。 |
int |
purge () 从此计时器的任务队列中移除所有已取消的任务。 |
void |
schedule (TimerTask task, Date time) 安排在指定的时间执行指定的任务。 |
void |
schedule (TimerTask task, Date firstTime, long period) 安排指定的任务在指定的时间开始进行重复的固定延迟执行 。 |
void |
schedule (TimerTask task, long delay) 安排在指定延迟后执行指定的任务。 |
void |
schedule (TimerTask task, long delay, long period) 安排指定的任务从指定的延迟后开始进行重复的固定延迟执行 。 |
void |
scheduleAtFixedRate (TimerTask task, Date firstTime, long period) 安排指定的任务在指定的时间开始进行重复的固定速率执行 。 |
void |
scheduleAtFixedRate (TimerTask task, long delay, long period) 安排指定的任务在指定的延迟后开始进行重复的固定速率执行 。 |
TimerTask类:由 Timer 安排为一次执行或重复执行的任务。
方法摘要
4我的测试代码:
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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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>servlet</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>com.servlet.listener.teslistener.MytestListener</listener-class>
</listener>
</web-app>
MytestListener 写道
package com.servlet.listener.teslistener;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MytestListener
implements
ServletContextListener {
private Timer timer = null;
@Override
public void
contextInitialized(ServletContextEvent event) {
event.getServletContext().log("服务器正在启动。。。。。。。。");
timer = new Timer(true);
timer.schedule(new DoTask(), 0, 5 * 1000);
}
/* 当我手动在eclipse里关闭服务器,缺看不到这个方法的执行,
* 当程序在服务器上运行, 而我要改它代码的时候,
* 就能看到这个方法的运行,不知道是为什么 */
@Override
public void
contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("服务器已经关闭。。。。。。。");
}
}
DoTask 写道
package com.servlet.listener.teslistener;
import java.util.Calendar;
import java.util.Date;
import java.util.TimerTask;
public class DoTask
extends
TimerTask {
private static final int defaul_hour=0;
private static final String default_date = "2009-04-25 17:44:00";
@Override
public void run() {
int result=compare();
System.out.println("result is =========="+result);
if(result<0){
Calendar cal=Calendar.getInstance();
// if(cal.get(Calendar.HOUR_OF_DAY)==defaul_hour){
// showConsoleMessage();
// }
showConsoleMessage();
}
else{
System.out.println("时间已经到了,定时器不能在执行。。。。。。");
}
}
public void showConsoleMessage(){
int a=1;
int b=2;
System.out.println("a and b is:"+(a+b));
System.out.println("now time is "+new Date().toString());
}
public int compare(){
String currentTime=GetCurrentTime.getCurrentTime();
int result=TimeCompare.timeCompare(currentTime,default_date);
return result;
}
}
GetCurrentTime 写道
package com.servlet.listener.teslistener;
import java.text.SimpleDateFormat;
import java.util.Date;
public class GetCurrentTime {
/*获得当前时间*/
public static String getCurrentTime(){
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
return dateString;
}
}
TimeCompare 写道
package com.servlet.listener.teslistener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class TimeCompare {
/*时间比大小*/
public static int timeCompare(String t1,String t2){
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar c1=Calendar.getInstance();
Calendar c2=Calendar.getInstance();
try {
c1.setTime(formatter.parse(t1));
c2.setTime(formatter.parse(t2));
} catch (ParseException e) {
e.printStackTrace();
}
int result=c1.compareTo(c2);
return result;
}
}