Skip to main content
Jump to: navigation, search

Servlet Example (BIRT) 2.1

Revision as of 09:56, 7 December 2007 by (Talk | contribs) (Setup)

< To: Integration Examples (BIRT)

Servlet Example

This example demonstrates using the RE API within a servlet. Note if possible it is better to use the BIRT Web Viewer Example. Add comments at the bottom of the example.

BIRT Report Engine API Return to the BIRT Report Engine API examples


1. Create a WebReport/WEB-INF/lib directory underneath the Tomcat webapps directory.

2. Copy all the jars in the birt-runtime-2_1_1/ReportEngine/lib directory from the Report Engine download into your WebReport/WEB-INF/lib directory.

3. Create a directory named platform in your WEB-INF folder.

4. Copy the birt-runtime-2_1_1/Report Engine/plugins and birt-runtime-2_1_1/ReportEngine/configuration directories to the platform directory you just created.

5. Copy iText.jar to the platform/plugins/com.lowagie.itext/lib directory. If the directory does not exist, create it.

Document1 01.png
This example application consist of three files that are archived into webreport.jar. If you are using Eclipse to build the servlet make sure to add all the jars, from the birt-runtime-2_1_1/ReportEngine/lib directory to your build path. You will also need servlet.jar, from the Tomcat Eclipse plug-in in your build path. Either build or copy webreport.jar from the example and place it in your WEB-INF/lib directory.

  • - Configuration properties for the Engine.
  • - Class used to initialize the Report Engine.
  • - The servlet that handles report generation on a GET command.

Note that if your report references classes from your application, the following code is required in order for the RunAndRenderTask/RunTask to use your application's classloader:

task.getAppContext().put(EngineConstants.APPCONTEXT_CLASSLOADER_KEY, ReportEngineService.class.getClassLoader());

This behaviour has changed from earlier versions of BIRT.



import java.util.Properties;
import java.util.logging.Level;

import javax.servlet.*;
import org.eclipse.birt.core.framework.PlatformServletContext;
import org.eclipse.birt.core.framework.IPlatformContext;
import  org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.core.exception.BirtException;

public class BirtEngine {

private static IReportEngine birtEngine = null;

private static Properties configProps = new Properties();

private final static String configFile = "";

public static synchronized void initBirtConfig() {

public static synchronized IReportEngine getBirtEngine(ServletContext sc) {
 if (birtEngine == null) 
  EngineConfig config = new EngineConfig();
  if( configProps != null){
   String logLevel = configProps.getProperty("logLevel");
   Level level = Level.OFF;
   if ("SEVERE".equalsIgnoreCase(logLevel)) 
    level = Level.SEVERE;
   } else if ("WARNING".equalsIgnoreCase(logLevel))
    level = Level.WARNING;
   } else if ("INFO".equalsIgnoreCase(logLevel)) 
    level = Level.INFO;
   } else if ("CONFIG".equalsIgnoreCase(logLevel))
    level = Level.CONFIG;
   } else if ("FINE".equalsIgnoreCase(logLevel)) 
    level = Level.FINE;
   } else if ("FINER".equalsIgnoreCase(logLevel)) 
    level = Level.FINER;
   } else if ("FINEST".equalsIgnoreCase(logLevel)) 
    level = Level.FINEST;
   } else if ("OFF".equalsIgnoreCase(logLevel)) 
    level = Level.OFF;

   config.setLogConfig(configProps.getProperty("logDirectory"), level);

  IPlatformContext context = new PlatformServletContext( sc );
  config.setPlatformContext( context );

   Platform.startup( config );
  catch ( BirtException e )
   e.printStackTrace( );

  IReportEngineFactory factory = (IReportEngineFactory) Platform
  .createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
  birtEngine = factory.createReportEngine( config );

 return birtEngine;

public static synchronized void destroyBirtEngine() {
 if (birtEngine == null) {
 birtEngine = null;

public Object clone() throws CloneNotSupportedException {
 throw new CloneNotSupportedException();

private static void loadEngineProps() {
 try {
  //Config File must be in classpath
  ClassLoader cl = Thread.currentThread ().getContextClassLoader();
  InputStream in = null;
  in = cl.getResourceAsStream (configFile);

 } catch (IOException e) {



import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;

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


public class WebReport extends HttpServlet {

private static final long serialVersionUID = 1L;
 * Constructor of the object.
private IReportEngine birtReportEngine = null;
protected static Logger logger = Logger.getLogger( "org.eclipse.birt" );

public WebReport() {

 * Destruction of the servlet. 
*/ public void destroy() { super.destroy(); BirtEngine.destroyBirtEngine(); } /** * The doGet method of the servlet.
* */ public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //get report name and launch the engine resp.setContentType("text/html"); //resp.setContentType( "application/pdf" ); //resp.setHeader ("Content-Disposition","inline; filename=test.pdf"); String reportName = req.getParameter("ReportName"); ServletContext sc = req.getSession().getServletContext(); this.birtReportEngine = BirtEngine.getBirtEngine(sc); //setup image directory HTMLRenderContext renderContext = new HTMLRenderContext(); renderContext.setBaseImageURL(req.getContextPath()+"/images"); renderContext.setImageDirectory(sc.getRealPath("/images")); logger.log( Level.FINE, "image directory " + sc.getRealPath("/images")); System.out.println("stdout image directory " + sc.getRealPath("/images")); HashMap<String, HTMLRenderContext> contextMap = new HashMap<String, HTMLRenderContext>(); contextMap.put( EngineConstants.APPCONTEXT_HTML_RENDER_CONTEXT, renderContext ); IReportRunnable design; try { //Open report design design = birtReportEngine.openReportDesign( sc.getRealPath("/Reports")+"/"+reportName ); //create task to run and render report IRunAndRenderTask task = birtReportEngine.createRunAndRenderTask( design ); task.setAppContext( contextMap ); //set output options HTMLRenderOption options = new HTMLRenderOption(); options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_HTML); //options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_PDF); options.setOutputStream(resp.getOutputStream()); task.setRenderOption(options); //run report; task.close(); }catch (Exception e){ e.printStackTrace(); throw new ServletException( e ); } } /** * The doPost method of the servlet.
* */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.println(" Post does nothing"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } /** * Initialization of the servlet.
* * @throws ServletException if an error occure */ public void init() throws ServletException { BirtEngine.initBirtConfig(); } }


Please enter comments below by selecting the edit icon to the right. You will need a Bugzilla account to add comments.

Back to the top