`
chenhua_1984
  • 浏览: 1233377 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

ServletContextListener,Timer,TimerTask学习笔记

    博客分类:
  • java
阅读更多

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 安排为一次执行或重复执行的任务。

方法摘要
 boolean cancel ()
          取消此计时器任务。
abstract  void run ()
          此计时器任务要执行的操作。
 long scheduledExecutionTime ()
          返回此任务最近实际 执行的安排 执行时间。

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;
}

}
1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics