birt java api_BIRT使用API进行简单部署
在网上查了下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 classpath
ClassLoader 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 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=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 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=newHTMLRenderOption();
options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_HTML);
//options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_PDF);
options.setOutputStream(resp.getOutputStream());
task.setRenderOption(options);
//run report
task.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">
WebReport
WebReport
WebReport
/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进行简单部署相关推荐
- HDFS文件系统(含hdfs常用命令,java对hdfs API的简单操作)
HDFS文件系统 HDFS概念 什么是HDFS HDFS的组成 HDFS文件块大小 HFDS命令行操作 基本语法 常用命令 Java操作hdfs 配置编译环境 获取文件系统 上传文件 文件下载 目录创 ...
- Kafka入门(一) 概述、部署与API的简单使用
Kafka入门(一) 概述.部署与API的简单使用 MQ 传统架构的问题 MQ简介 MQ的优缺点 优点 缺点 同步与异步 P2P模式 订阅发布模式 Kafka概述 简介 特点 名称解释 Broker ...
- java毕业设计智能分析的简单聚众筹平台Mybatis+系统+数据库+调试部署
java毕业设计智能分析的简单聚众筹平台Mybatis+系统+数据库+调试部署 java毕业设计智能分析的简单聚众筹平台Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开 ...
- JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库
JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计vue开发一个简单音乐播放器计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目 ...
- 微服务nacos简单部署+网关设置+日志管理
目录 1.nacos简单部署 2.网关设置 3日志管理. 1.nacos简单部署 nacos引用的主要依赖是然后在配置文件进行注册(需要提前启动nacos插件,默认密码都是nacos) <dep ...
- Android Java使用JavaMail API发送和接收邮件的代码示例
JavaMail是Oracle甲骨文开发的Java邮件类API,支持多种邮件协议,这里我们就来看一下Java使用JavaMail API发送和接收邮件的代码示例 使用Javamail发送邮件,必需的j ...
- 自定义ClassLoader实现java应用核心逻辑模块热部署
http://waterdh.iteye.com/blog/520399 本文主要是根据classloader的特性,结合实际产品环境中遇到的问题,来探讨下JAVA应用中局部模块热部署的可行性. 我们 ...
- java moment 日期转换_关于日期:如何使用Java 8 DateTime API转换修改后的儒略日数字...
我有一个数据库,用于存储日期和日期时间(分别为INTEGER和DOUBLE)作为已修改的儒略日数(MJD).修改后的儒略日数是自1858年11月17日午夜UTC以来连续的天数.根据定义,它们始终以UT ...
- Java 8 Stream Api 中的 skip 和 limit 操作
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 Java 8 Stream API 中的sk ...
最新文章
- Python:Scrapy的安装和入门案例
- 云原生收购潮:思科计划收购Portshift;Kasten加入Veeam
- tcp/udp socket编程异同
- Spring Boot 之Spring data JPA简介
- 面试必谈的哈希,.Net 程序员温故而知新
- 关于蓝牙服务UUID自定义简介
- pycharm中设置显示行数
- java模板引擎哪个好_浅谈Java模板引擎性能对比
- JavaScript时间格式化工具函数
- 物联网全栈教程(1)——总目录
- 选自《致加西亚的信》
- 读书有益——》来自古诗词中的成语
- 网站域名如何解析到阿里云和腾讯云服务器?
- linux nfs共享目录访问速度慢,linux之间共享文件夹选nfs还是选samba--
- Java进阶学习资料,java小程序开发面试题
- Qt入门极简教程(二)
- 维护一个大型开源项目,例如vscode是怎样的体验?
- 程序员的机器学习入门笔记(一):基本概念介绍
- 为什么宇宙会将最大速度限制在光速
- 深圳计算机电缆,计算机电缆加工ZB-DJVP2V-深圳
热门文章
- TOOLFK工具-在线摩斯电码翻译转换工具
- 天下无敌windows7系统下载给你看看
- 什么是敏捷开发和瀑布开发
- GPT-4推理提升1750%!DeepMind提出全新思维树框架,让LLM反复思考
- 如何让设计作品更具亮点 哪些因素值得参考
- function 函数用法
- 软件测试入门之软件测试的概念与过程(精辟干货)
- 网站内容页面怎样优化?深度解析内容页面优化技巧
- jetty与tomcat区别
- Excel、Word转PDF时,异常com.jacob.com.ComFailException: Invoke of: SaveAs