b/s下的birt定时生成报表功能。

先写一个TimerServlet,web.xml配置如下:
<servlet>
                <description>
                </description>
                <display-name>TimerServlet</display-name>
                <servlet-name>TimerServlet</servlet-name>
                <servlet-class>com.test.TimerServlet</servlet-class>
               
                <init-param>
                <param-name>runTime</param-name>       //我定义的一个参数,用来在什么时候执行生成报表。
                <param-value>2009-05-03 21:44</param-value>
                </init-param>
                <load-on-startup>1</load-on-startup>
        </servlet>

TimerServlet代码如下:

package com.test;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import java.util.Timer;
import java.util.TimerTask;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.eclipse.birt.core.exception.BirtException;
import org.eclipse.birt.core.framework.IPlatformContext;
import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.core.framework.PlatformServletContext;
import org.eclipse.birt.report.engine.api.EngineConfig;
import org.eclipse.birt.report.engine.api.EngineConstants;
import org.eclipse.birt.report.engine.api.HTMLRenderOption;

import org.eclipse.birt.report.engine.api.IReportEngine;
import org.eclipse.birt.report.engine.api.IReportEngineFactory;
import org.eclipse.birt.report.engine.api.IReportRunnable;
import org.eclipse.birt.report.engine.api.IRunAndRenderTask;



public class TimerServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;

        private String runTime;
       
        private String pattern;
       
        private ServletContext sc ;
   
       public TimerServlet() {
           super();
       }

        public void init(ServletConfig config) throws ServletException {
                sc = config.getServletContext();
                System.out.println("sc "+sc);
                runTime = config.getInitParameter("runTime");
                //        runTime="2009-05-03 21:42";
                        pattern ="yyyy-MM-dd hh:mm";
                        SimpleDateFormat format = new SimpleDateFormat(pattern);
                        Calendar cal = Calendar.getInstance();
                        try {
                                cal.setTime(format.parse(runTime));
                                Timer t = new Timer();
                                t.schedule(new TimerTask(){  //这里我new了一个匿名类,做为schedule的第一个参数
                                        @Override
                                        public void run() {
                                                runReport();       //当前时间是我们指定的时间时执行运行报表这个方法
                                        }
                                       
                                }, cal.getTime()); //cal.getTime()这是schedule的第二个参数
                        } catch (ParseException e) {
                                e.printStackTrace();
                        }
        }
       

        private void  runReport() {
                 IReportEngine birtEngine = null;
                  EngineConfig config = null;
               
                config = new  EngineConfig();
                config.setEngineHome("");
                IPlatformContext context = new PlatformServletContext(sc);
                config.setPlatformContext(context);

                try {
                        Platform.startup(config);
                } catch (BirtException e) {
                        e.printStackTrace();
                }
                IReportEngineFactory factory = (IReportEngineFactory) Platform
                .createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);
                birtEngine = factory.createReportEngine(config);
                IReportRunnable design;
                try
                {
                        design = birtEngine.openReportDesign( sc.getRealPath("/Reports")+"/test2.rptdesign" );
                        IRunAndRenderTask task = birtEngine.createRunAndRenderTask( design );               
                        task.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, TimerServlet.class.getClassLoader());
                       
                        HTMLRenderOption options = new HTMLRenderOption();               
                        options.setOutputFileName(sc.getRealPath("/output")+"/test2.pdf" ); //生成pdf文件保存在output文件夹里。
                        options.setOutputFormat("pdf");
                        options.setHtmlRtLFlag(false);
                        options.setEmbeddable(false);
                        task.setRenderOption(options);
                       
                        task.run();
                        task.close();
                        System.out.println("success!");
                }catch (Exception e){
                        e.printStackTrace();
                       
                }
               
               
        }
       
       
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                super.doGet(request, response);
        }

        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       
                super.doGet(request, response);
        }

}