我tomcat开启以后,不想做任何触发,直接开始每秒执行一下一个类,如何在servlet中配置,然后对应的类应该怎么写?
我网上找了一个,但是出错,很抱歉啊,我是java新手,有些java的基础东西不太理解,希望大家指点一下。
   <servlet>   
           <servlet-name>TimerTask</servlet-name>   
           <servlet-class>TimerTasks.RunTest</servlet-class>   
           <load-on-startup>2</load-on-startup>   
   </servlet>
web.xml文件的配置
RunTest.java里面的写法
package TimerTasks;
import java.util.Timer;
import java.util.TimerTask;import   javax.servlet.http.HttpServlet;public   class   RunTest   extends   HttpServlet{   
    public   void   init()   {   
            Timer   timer   =   new   Timer();   
              
            //每十秒钟运行一次   
            timer.schedule(new TimerTask(),0,1000*10); 错误出现在这里TimerTask(),这个不知道为什么出错了
    }   
}
EveryDayTasks.java里面的写法
package   TimerTasks;   
    
import   java.util.TimerTask;   
    
public   class   EveryDayTasks   extends   TimerTask   {   
public   void   run(){   
                            //search();             //在这里做您要做的事   
System.out.println("ABC");
     }   
}

解决方案 »

  1.   

    如果你是用tomcat 做定时执行可参考:
    http://download.csdn.net/source/1455326如果只是tomcat 启动的时候执行一次。可以这样做做个Servlet 然后在init中加入你要做的动作。package job;import java.io.IOException;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;public class StartServlet extends HttpServlet {
    public void init() throws ServletException {
    System.out.println("执行程序test");
    } public void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException { } public void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
    }}web.xml         <servlet>
    <servlet-name>StartupServlet</servlet-name>
    <servlet-class>job.StartServlet</servlet-class>
    <load-on-startup>10</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>StartupServlet</servlet-name>
    <url-pattern>/StartupServlet</url-pattern>
    </servlet-mapping>
      

  2.   

     timer.schedule(new TimerTask(),0,1000*10); new TimerTask() 应该是个类而且 里面有run()方法才对,你给的只是个TimerTask 是继承来的,建议你重新方法吧
      

  3.   

    建议楼主用quartz:http://www.opensymphony.com/quartz/
      

  4.   

    支持楼上的。Quartz用来做定时处理很方便,而且功能强大。
    Spring框架自带有。
      

  5.   

    给你一个最简单有效的建议。
    1 书写一个可以自动定时执行的程序,app也行这个你自己考虑,呵呵
    2 让这个程序实现 Runnable 接口
    3 在servlet初始化的那个代码里,启动前面那个线程OVER
      

  6.   

    你这个方法不是没考虑过,要是用这个我就写一个vb程序来运行了,不过相对系统来说局限比较大,我原来见过一个短信自动运行程序,可惜忘记拷贝代码了
    我这个要求不是tomcat启动运行一次,而是不停的运行,大概3秒执行一次。
      

  7.   


    不会用Spring框架啊,就会用用Struts框架,而且还是25子
      

  8.   

       <servlet>   
       <servlet-name>TestAutoRun</servlet-name>   
       <servlet-class>com.ee2ee.servlet.TestAutoRun</servlet-class>   
       <load-on-startup>1</load-on-startup> </servlet>  
       <servlet-mapping>    
       <servlet-name>TestAutoRun</servlet-name>    
       <url-pattern>/servlet/TestAutoRun</url-pattern> 
       </servlet-mapping>
    -------------TestAutoRun.java------------
    package com.ee2ee.servlet;import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;public class TestAutoRun extends HttpServlet
    {
        private HttpServletRequest request;
        private PrintWriter out;    //当servlet类被加载时,执行本函数
        //在本方法中放置代码即可完成自动加载
        public void init(ServletConfig config) throws ServletException
        {
            super.init(config);
        
        //此处放置需要自动执行的代码
            System.out.println("I 'm ok now.");
        }    //Process the HTTP Get request
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
            //以下是标准的GET方法处理,由http的GET方法触发(调用)
            this.doPost(request, response);
        }    //Process the HTTP Post request
        //标准的POST方法处理,由http的POST方法触发(调用)
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {    
            response.setContentType("text/html; charset=GB2312");
            PrintWriter out = response.getWriter();        this.request = request;
            this.out = out;        out.println("<html>");
            out.println("<head>");
            out.println("</head>");
            out.println("<body>");
            out.println("this is a test.<br>");
            out.println("</body>");
            out.println("</html>");
        }    //Clean up resources
        public void destroy()
        {    }

    -------------------------------
    用这个方法只能tomcat启动的时候运行一次,不能每秒或者每5秒运行一次
      

  9.   

    用quartz,不用spring也行,网上查一下资料集成进去很简单的
      

  10.   

    timer.schedule(new EveryDayTasks(),0,1000*10); 
    TimerTask只是个抽象类,当然要以它的字类来实例化了,你不是也定义了这么一个东西吗?
      

  11.   

    web.xml配置
    <listener>
      <listener-class>TimerTasks.RunTest</listener-class>
    </listener>
    java class
    public class RunTest extends HttpServlet implements ServletContextListener {
    private static final long serialVersionUID = 1L;
    private Timer timer = null; public RunTest() {
    // TODO Auto-generated constructor stub
    } @Override
    public void contextDestroyed(ServletContextEvent arg0) {
    timer.cancel();
    arg0.getServletContext().log("3");

    } @Override
    public void contextInitialized(ServletContextEvent arg0) {
    timer = new Timer(true);
    MyTask task = new MyTask(arg0.getServletContext());
    timer.schedule(task, 0, 1000);
    }
    }public class MyTask extends TimerTask {
    private static boolean isrunning = false;
    private ServletContext context = null;
    public MyTask(){

    }

    public MyTask(ServletContext context){
    this.context = context;
    } @Override
    public void run() {
    if(!isrunning){
    isrunning = true;
    //调用你要执行的方法
    isrunning = false;
    }else{
    context.log("no");
    } }
    }
      

  12.   

    fztjava 
    你写的方法错误一堆,暂时没心情做了,先暂停,过两天在研究。平均分配分了啊