在网上查了下BIRT的文章,不是很多。而且讲述的也不是十分全面。还是得自己琢磨啊。

刚实验好,贴上来分享一下共同交流。希望也能帮助到对API部署还困惑的人。

做这个纯粹是看官网上的例子,还有好多疑点,希望高手能给我解答下。

首先,这个API部署其实在官网上是叫"Servlet Example"。我没有在网上找到中文的这个教程,所以我就以我这贫乏的英语水品来自己理解了官网上的步骤。下面直接开始,我不是原文翻译的所以有些地方用词不当也是正常。

既然是个Servlet Exampl那么它肯定符合Java EE的规范。我先把目录结构贴到下面,让大家先有个整体感觉。

图片不是很清楚,凑合着看吧。

我先说下目录结构Tomcat和Webapps就不说了。下面就是自己新建一个自己的文件夹在tomcat/webapps下面是自己的API BIRT的项目。名字自己起就好了,官网上是叫WebReport吧,上面写的很清楚了。我自己是叫TestAPI

Images和Reports是用来放报表的地方,Images是图片和图像报表,然后Reports是文字报表。就是把自己建好的报表copy到 Reports里面。具体建报表就不说了,自带的帮助文档和网上有很多资料。下面就是WEB-INF目录了,建立好这个目录,你的API所有配置和用的资源才可以发动。在WEB-INF下面的lib没用过也知道是放jar的地方。还有一个platform也是放一些报表运行所需的配置信息和一些jar。其实我们都知道上面图其实应该在WEB-INF下面还有个classes文件夹,用来放编译好的java文件。这也是个重要的目录。上面没有画。

官网上是分了五步,我这里就按自己的来了,也不说分步了。

首先也是需要一个runtime从http://www.eclipse.org/downloads/download.php?file=/birt/downloads/drops/R-R1-2_1_3-200707051847/birt-runtime-2.1.3.zip你可以下载到这个“runtime”不是很大。下载好以后打开,然后进入ReportEngine目录把lib里的所有jar包全部拷贝到自己建立的lib下面,如图

然后开始往platform里面塞东西。把runtime/ReportEngine的两个文件夹(plugins和configuration)拷贝到你自己的platform里面。

plugins里面也是一些报表所需的jar而configuration里面是什么东西?就是一个config.ini文件,我不知道是干什么用的。

拷完之后如下:

如果你的报表用到数据库驱动了,必须把数据库驱动文件拷贝到\WEB-INF\platform\plugins\org.eclipse.birt.report.data.oda.jdbc_2.1.1.v20070705-1847\drivers这个路径下面,看着长其实不难找。

拷贝完是这样,贴个图:

配置就差不多了,就查一个web.xml文件了。

下面是比较重要的东西。有三个文件。是API的核心操作文件。

BirtConfig.properties - Configuration properties for the Engine.

BirtEngine.java - Class used to initialize the Report Engine.

WebReport.java - The servlet that handles report generation on a GET command.

就是上面三个文件是官网的原文,我拷贝过来的。

第一个是构造报表引擎的资源文件。

第二个用来初始化报表引擎的类。

第三个用GET方法来调用报表。

我英文不好,自己理解是这样的。(四级我都没考,我觉得找个美国人待上一个月英语水平就上去了)

具体这三个文件的代码我贴到下面

BirtConfig.properties

logDirectory=c:/temp

logLevel=FINEST

BirtEngine.java

importjava.io.InputStream;

importjava.io.IOException;

importjava.util.Properties;

importjava.util.logging.Level;

importorg.eclipse.birt.report.engine.api.EngineConfig;

importorg.eclipse.birt.report.engine.api.IReportEngine;

importjavax.servlet.*;

importorg.eclipse.birt.core.framework.PlatformServletContext;

importorg.eclipse.birt.core.framework.IPlatformContext;

importorg.eclipse.birt.core.framework.Platform;

importorg.eclipse.birt.core.exception.BirtException;

importorg.eclipse.birt.report.engine.api.IReportEngineFactory;

publicclassBirtEngine{

privatestaticIReportEngine birtEngine=null;

privatestaticProperties configProps=newProperties();

privatefinalstaticString configFile="BirtConfig.properties";

publicstaticsynchronizedvoidinitBirtConfig(){

 loadEngineProps();

}

publicstaticsynchronizedIReportEngine getBirtEngine(ServletContext sc){

if(birtEngine==null)

{

  EngineConfig config=newEngineConfig();

if( configProps!=null){

   String logLevel=configProps.getProperty("logLevel");

   Level level=Level.OFF;

if("SEVERE".equalsIgnoreCase(logLevel))

{

    level=Level.SEVERE;

   }elseif("WARNING".equalsIgnoreCase(logLevel))

{

    level=Level.WARNING;

   }elseif("INFO".equalsIgnoreCase(logLevel))

{

    level=Level.INFO;

   }elseif("CONFIG".equalsIgnoreCase(logLevel))

{

    level=Level.CONFIG;

   }elseif("FINE".equalsIgnoreCase(logLevel))

{

    level=Level.FINE;

   }elseif("FINER".equalsIgnoreCase(logLevel))

{

    level=Level.FINER;

   }elseif("FINEST".equalsIgnoreCase(logLevel))

{

    level=Level.FINEST;

   }elseif("OFF".equalsIgnoreCase(logLevel))

{

    level=Level.OFF;

   }

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

  }

  config.setEngineHome("");

  IPlatformContext context=newPlatformServletContext( 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 );

 }returnbirtEngine;

}

publicstaticsynchronizedvoiddestroyBirtEngine(){

if(birtEngine==null){

return;

 } birtEngine.shutdown();

 Platform.shutdown();

 birtEngine=null;

}

publicObject clone()throwsCloneNotSupportedException{

thrownewCloneNotSupportedException();

}

privatestaticvoidloadEngineProps(){

try{

//Config File must be in classpathClassLoader cl=Thread.currentThread ().getContextClassLoader();

  InputStream in=null;

  in=cl.getResourceAsStream (configFile);

  configProps.load(in);

  in.close();

 }catch(IOException e){

  e.printStackTrace();

 }

}

}

WebReport.java

importjava.io.IOException;

importjava.io.PrintWriter;

importjava.util.HashMap;

importjava.util.logging.Level;

importjava.util.logging.Logger;

importjavax.servlet.ServletContext;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importorg.eclipse.birt.report.engine.api.EngineConstants;

importorg.eclipse.birt.report.engine.api.HTMLRenderContext;

importorg.eclipse.birt.report.engine.api.HTMLRenderOption;

importorg.eclipse.birt.report.engine.api.IReportRunnable;

importorg.eclipse.birt.report.engine.api.IRunAndRenderTask;

importorg.eclipse.birt.report.engine.api.IReportEngine;

publicclassWebReportextendsHttpServlet{

/** *//** *

*/privatestaticfinallongserialVersionUID=1L;

/** *//** * Constructor of the object.

*/privateIReportEngine birtReportEngine=null;

protectedstaticLogger logger=Logger.getLogger("org.eclipse.birt");

publicWebReport(){

super();

}

/** *//** * Destruction of the servlet.

*/

publicvoiddestroy(){

super.destroy();

 BirtEngine.destroyBirtEngine();

}

/** *//** * The doGet method of the servlet.

 *

*/publicvoiddoGet(HttpServletRequest req, HttpServletResponse resp)

throwsServletException, IOException{

//get report name and launch the engineresp.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 directoryHTMLRenderContext renderContext=newHTMLRenderContext();

 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"));

 HashMapcontextMap=newHashMap();

 contextMap.put( EngineConstants.APPCONTEXT_HTML_RENDER_CONTEXT, renderContext );

 IReportRunnable design;

try

{

//Open report designdesign=birtReportEngine.openReportDesign( sc.getRealPath("/Reports")+"/"+reportName );

//create task to run and render reportIRunAndRenderTask task=birtReportEngine.createRunAndRenderTask( design );

  task.setAppContext( contextMap );

//set output optionsHTMLRenderOption options=newHTMLRenderOption();

  options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_HTML);

//options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_PDF);options.setOutputStream(resp.getOutputStream());

  task.setRenderOption(options);

//run reporttask.run();

  task.close();

 }catch(Exception e){

  e.printStackTrace();

thrownewServletException( e );

 }}

/** *//** * The doPost method of the servlet.

 *

*/publicvoiddoPost(HttpServletRequest request, HttpServletResponse response)

throwsServletException, IOException{

this.doGet(request,response);

/** *//** * Initialization of the servlet.

 *

 *@throwsServletException if an error occure

*/

publicvoidinit()throwsServletException{

 BirtEngine.initBirtConfig();

}

}

官网上还有2.2版本WebReport.java的代码,我反正没用上。您要有用上的可以去试试。

这三个文件弄好了就ok了。官网上还罗嗦一大堆是在Eclipse下开发要加什么插件什么插件的其实就是加上Servlet支持的就行。我没有用纯Eclipse开发所以直接编译好这两个java,连同拷贝上那个BirtConfig.properties资源文件到自己的WEB-INF/classes下面就行了。

这下好了,就只有配置你的servlet了。

在WEB-INF下面建立一个web.xml文件,配置一下这个webreport的servlet

代码:

<?xml  version="1.0" encoding="UTF-8"?>xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">WebReportWebReportWebReport/webReport

最后,把自己做好的报表放到自己项目下面的reports(这是个复数的s)里面就好,这个目录不能错的,在servlet里面是要找这个目录的。

很简单,然后自己再写一个自己的jsp就ok了

原来的WebReport.java文件的doPost方法里什么都没有的,如果自己的jsp通过post传递的话不会显示出来报表。我上面吧post里面调用get了。

这下就全部OK了。

下面我的这个小jsp给大家参考。

@ page language="java"import="java.util.*"pageEncoding="gb2312"%>

TestReport.rptdesign 走你

OK在输入框里面填写你的报表名称,记得要带扩展名。

这就完工了,但是有个问题,我在用脚本数据源的时候提示不成功。还有我的带参数的报表这样部署的话不让输入参数自己就全出来了。希望大侠能帮我参考下。留言啊。留言~~小弟新人,学习中,渴望进步!明天还得加班。困啊

高手新人都加好友啊:MSN:lewesbonnie@hotmail.com   QQ: 232172300

转载请注明出处和作者哈!!

posted on 2008-06-06 23:08 leweslove 阅读(2820) 评论(0)  编辑  收藏 所属分类: Other

birt java api_BIRT使用API进行简单部署相关推荐

  1. HDFS文件系统(含hdfs常用命令,java对hdfs API的简单操作)

    HDFS文件系统 HDFS概念 什么是HDFS HDFS的组成 HDFS文件块大小 HFDS命令行操作 基本语法 常用命令 Java操作hdfs 配置编译环境 获取文件系统 上传文件 文件下载 目录创 ...

  2. Kafka入门(一) 概述、部署与API的简单使用

    Kafka入门(一) 概述.部署与API的简单使用 MQ 传统架构的问题 MQ简介 MQ的优缺点 优点 缺点 同步与异步 P2P模式 订阅发布模式 Kafka概述 简介 特点 名称解释 Broker ...

  3. java毕业设计智能分析的简单聚众筹平台Mybatis+系统+数据库+调试部署

    java毕业设计智能分析的简单聚众筹平台Mybatis+系统+数据库+调试部署 java毕业设计智能分析的简单聚众筹平台Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开 ...

  4. JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目 ...

  5. 微服务nacos简单部署+网关设置+日志管理

    目录 1.nacos简单部署 2.网关设置 3日志管理. 1.nacos简单部署 nacos引用的主要依赖是然后在配置文件进行注册(需要提前启动nacos插件,默认密码都是nacos) <dep ...

  6. Android Java使用JavaMail API发送和接收邮件的代码示例

    JavaMail是Oracle甲骨文开发的Java邮件类API,支持多种邮件协议,这里我们就来看一下Java使用JavaMail API发送和接收邮件的代码示例 使用Javamail发送邮件,必需的j ...

  7. 自定义ClassLoader实现java应用核心逻辑模块热部署

    http://waterdh.iteye.com/blog/520399 本文主要是根据classloader的特性,结合实际产品环境中遇到的问题,来探讨下JAVA应用中局部模块热部署的可行性. 我们 ...

  8. java moment 日期转换_关于日期:如何使用Java 8 DateTime API转换修改后的儒略日数字...

    我有一个数据库,用于存储日期和日期时间(分别为INTEGER和DOUBLE)作为已修改的儒略日数(MJD).修改后的儒略日数是自1858年11月17日午夜UTC以来连续的天数.根据定义,它们始终以UT ...

  9. Java 8 Stream Api 中的 skip 和 limit 操作

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 Java 8 Stream API 中的sk ...

最新文章

  1. Python:Scrapy的安装和入门案例
  2. 云原生收购潮:思科计划收购Portshift;Kasten加入Veeam
  3. tcp/udp socket编程异同
  4. Spring Boot 之Spring data JPA简介
  5. 面试必谈的哈希,.Net 程序员温故而知新
  6. 关于蓝牙服务UUID自定义简介
  7. pycharm中设置显示行数
  8. java模板引擎哪个好_浅谈Java模板引擎性能对比
  9. JavaScript时间格式化工具函数
  10. 物联网全栈教程(1)——总目录
  11. 选自《致加西亚的信》
  12. 读书有益——》来自古诗词中的成语
  13. 网站域名如何解析到阿里云和腾讯云服务器?
  14. linux nfs共享目录访问速度慢,linux之间共享文件夹选nfs还是选samba--
  15. Java进阶学习资料,java小程序开发面试题
  16. Qt入门极简教程(二)
  17. 维护一个大型开源项目,例如vscode是怎样的体验?
  18. 程序员的机器学习入门笔记(一):基本概念介绍
  19. 为什么宇宙会将最大速度限制在光速
  20. 深圳计算机电缆,计算机电缆加工ZB-DJVP2V-深圳

热门文章

  1. TOOLFK工具-在线摩斯电码翻译转换工具
  2. 天下无敌windows7系统下载给你看看
  3. 什么是敏捷开发和瀑布开发
  4. GPT-4推理提升1750%!DeepMind提出全新思维树框架,让LLM反复思考
  5. 如何让设计作品更具亮点 哪些因素值得参考
  6. function 函数用法
  7. 软件测试入门之软件测试的概念与过程(精辟干货)
  8. 网站内容页面怎样优化?深度解析内容页面优化技巧
  9. jetty与tomcat区别
  10. Excel、Word转PDF时,异常com.jacob.com.ComFailException: Invoke of: SaveAs