任何jsp/servlet都不应该定时调用
写一个servlet,在web.xml中加入这个servlet,并且<load-on-startup>1</load-on-startup>,但是不对这个servlet加上servlet-mapping(避免能够通过浏览器访问)
在它的init方法中使用Timer来定时执行一个线程

解决方案 »

  1.   

    直接写个ServletContextListener,在contextInitialized方法里实例Timer去做就好了
      

  2.   

    给你介绍一个非常不错的开源项目quartz,用它这些很容易就搞定了!!!
      

  3.   

    ^_^,jboss定时调用有实在意义么
    关注
      

  4.   

    以前见过一个项目用JMX 什么Mean其实也应该是个定时的
      

  5.   

    mbean是管理的
    是定时调用一个类吧,servlet确实没什么定时的,就是让它sleep
      

  6.   

    回flyxxxxx(灭神):
    Timer能实现我知道,但是我觉得太麻烦。个人认为servlet服务器都应该有定时执行某个servlet的配置(resin & tomcat都有),所以想求jboss的配置方式,同时顺便求jboss的官方文档。在问一下:为什么任何jsp/servlet都不应该定时调用?
      

  7.   

    我写过一个。就是每天某个时候定时执行得,用java得Timer类写得:
    首先web.xml相关项如下:
    <servlet> 
            <servlet-name>TimingServlet</servlet-name>
            <servlet-class>com.*****.TimerServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
    </servlet> 
    TimerServlet类:
    package com.fesc.pubservlet;
    /**
     * <p>Title:****(V5.0)</p>
     * <p>Description:公共的Servlet,定时执行程序,本
     * Servlet必须在服务器启动时即被装载,滞留于内存</p>
     * <p>Copyright: Copyright (c) 2003</p>
     * <p>Company: ***</p>
     * <p>Create Time: 2004-3-27</p>
     * @author YanZhijie
     * @version 1.0
     * <br>
     * $Id$
     * $Log$
     */
    import java.util.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    public class TimerServlet extends HttpServlet {
      public void init(ServletConfig config) throws ServletException{
    super.init(config);
    System.out.println("Init Success!!!!!!!!!!");
    WrapperTimer wrapperTimer=new WrapperTimer(); 
    wrapperTimer.scheduleTask();  
      } 
    }
    TimerServlet类调用得java Timer类:
    package com.***;
    import java.util.*;
    import java.sql.*;
    import java.io.*;
    import java.text.*;
    public class WrapperTimer {
      //设定启动时间:24小时制
      private int iHour=1,iMinute=0,iSecond=0; //凌晨1点启动
      private Timer timer = null;
      private TimerTask timerTask = null;
      private final static int PERIOD = 1 * 60 * 60 * 1000;
      private Calendar cal= Calendar.getInstance();
      public WrapperTimer() {
    timer = new Timer();
    timerTask = new MyTask();
      }
      public void scheduleTask() {
    //Calendar cal = Calendar.getInstance();
    cal.getTime();
    cal.set(cal.HOUR_OF_DAY,iHour);
    cal.set(cal.MINUTE,iMinute);
    cal.set(cal.SECOND,iSecond);
    timer.schedule(timerTask, cal.getTime(), PERIOD);
      }
      public void cancel() {
    timer.cancel();
      }
      private class MyTask extends TimerTask {
    public void run() {
      Calendar curCal=Calendar.getInstance();   //当前时间
      if(( curCal.getTime().getHours()==iHour)&&(curCal.getTime().getMinutes()>=iMinute)){
    System.out.println("定时程序启动:");
                      ************//调用你要做的动作 System.out.println("定时程序执行完毕!");
      }else{
    //System.out.println("时间不对");
      }
    } }
    }