birt和web项目整合

需求提出用户可一定程度配置的报表,我一个人开能力有限,选择了BIRT,试了下还比较好用,先做个demo,先解决birt和项目整合的问题:
和web项目整合最简单的莫过于,把项目里的url直接指向到birt项目的报表文件;但是这样做的话有2个问题:1.这些报表的访问权限没法控制,用户可以直接访问birt项目的url;2.报表的数据源都配置在报表里,而且birt里登录的密码是base64加密的,一旦环境有变化,改起来很麻烦

[b][size=large]一、BIRT与工程的集成。
[/size][/b]
下面内容主要复制于[color=blue]http://www.birthome.cn/forum.php?mod=viewthread&tid=8606&extra=page%3D1,[/color]
最终copy jar的时候,有些不同,可能是版本不同,我的环境是 :STS 3.5.1、Birt4.4.2
1、从eclipse官网下载birt的运行包(地址:http://www.eclipse.org/birt/),解压缩,先拷贝WebViewerExample\WEB-INF下如下文件到工程的WEB-INF目录下:
jrun.web.xml server-config.wsdd viewer.properties
2、将WebViewerExample\WEB-INF\tlds下的birt.tld文件拷贝到工程的\WEB-INF\tlds下。
3、在工程的WEB-INF下建立report-engine的文件夹,在report-engine下新建如下四个文件夹 documents、images、logs 、scriptlib,其实位置和名称都不重要,可以配置
4、将WebViewerExample\ webcontent文件夹拷贝到要集成的WEB应用的根目录下
如果需要
5、在web应用的根目录下建立reportFiles文件夹,用来存放报表文件,位置和名称都不重要,可以配置
6、将web.xml中内容拷贝到工程的web.xml中,注意只要copy birt特有的内容,这个稍微有点经验的同学,应该一看就能明白
其中web.xml文件需做如下修改(根据上面创建的目录来配置):
a、修改BIRT_VIEWER_WORKING_FOLDER项的值为reportFiles;
b、修改BIRT_VIEWER_DOCUMENT_FOLDER项的值为WEB-INF/report-engine/documents;
c、修改BIRT_VIEWER_IMAGE_DIR项的值为WEB-INF/report-engine/images;
d、修改BIRT_VIEWER_LOG_DIR项的值为WEB-INF/report-engine/logs;
e、修改BIRT_VIEWER_SCRIPTLIB_DIR项的值为WEB-INF/report-engine/scriptlib;

f、如果需调整日志级别可修改BIRT_VIEWER_LOG_LEVEL的值为ALL;
可选的值有:ALL|SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST|OFF。级别由高到低。

7、拷贝jar包,这一步放最后是因为我对示例工程中的jar包进行了清理。
下面是
axis.jar
com.ibm.icu_52.1.0.v201404241930.jar
com.lowagie.text_2.1.7.v201004222200.jar
commons-cli-1.0.jar
commons-discovery-0.2.jar
jaxrpc.jar
js.jar
org.apache.batik.css_1.6.0.v201011041432.jar
org.apache.batik.util_1.6.0.v201011041432.jar
org.eclipse.birt.runtime_4.4.0.v20140611-1043.jar
org.eclipse.datatools.connectivity.oda.consumer_3.2.5.v201109151100.jar
org.eclipse.datatools.connectivity.oda_3.3.4.v201212070447.jar
org.eclipse.datatools.connectivity_1.2.7.v201302060508.jar
org.eclipse.emf.common_2.10.0.v20140514-1158.jar
org.eclipse.emf.ecore.change_2.10.0.v20140514-1158.jar
org.eclipse.emf.ecore.xmi_2.10.0.v20140514-1158.jar
org.eclipse.emf.ecore_2.10.0.v20140514-1158.jar
org.eclipse.emf_2.6.0.v20140519-0339.jar
org.eclipse.equinox.common_3.6.200.v20130402-1505.jar
org.eclipse.equinox.registry_3.5.400.v20140428-1507.jar
org.eclipse.osgi_3.10.0.v20140606-1445.jar
org.w3c.css.sac_1.3.0.v200805290154.jar
Tidy.jar
viewservlets.jar
wsdl4j-1.5.1.jar

至此通过如上步骤已经将birt报表集成到我们的项目中来了。

[b][size=large]二、BIRT报表数据源配置与工程统一
[/size][/b]
建好的报表如果用数据库的话,一般是这样的:
<property name="odaDriverClass">oracle.jdbc.OracleDriver</property>
<property name="odaURL">jdbc:oracle:thin:@127.0.0.1:1521:sip</property>
<property name="odaUser">monitor</property>
<encrypted-property name="odaPassword" encryptionID="base64">c2Fuc3M=</encrypted-property>

主要的问题是密码,是base64加密,如果开发环境和现场环境不一样,部署的时候非常麻烦,最好是能用工程里的jdbc配置

网上的改法很多,试下来,比较方便的修改的方法([color=red]原链接我找不到了,好像是百度文库,非常抱歉原作者[/color])如下:
1. 在sts中选择,reportDesign 视图,
2. 选择已经集成到工程里的报表
3. 在Data explorer 里,选择datasource
4. 在右边的选择srcipt ,在上方选择“before Open”,加入下面的内容

importPackage( Packages.java.io,Packages.java.util,Packages.java.net );
importPackage( Packages.javax.servlet.http );

req = reportContext.getHttpServletRequest( );
propPath = "/WEB-INF/jdbc.properties";
if ( propPath.charAt(0) != "/" )
propPath = "/" + propPath;

url = req.getSession( ).getServletContext( ).getResource( propPath );
if ( url != null )
{
props = new java.util.Properties();
props.load(url.openStream());
extensionProperties.odaURL = new String(props.getProperty("jdbc.url"));
extensionProperties.odaDriverClass = new String(props.getProperty("jdbc.driverclass"));
extensionProperties.odaUser = new String(props.getProperty("jdbc.username"));
extensionProperties.odaPassword = new String(props.getProperty("jdbc.password"));
}

就可以用工程里的配置了

这样的还有个问题,每个报表都需要配置;网上有个datasourcelib的方法,可以让所有的报表用统一的配置,待尝试
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值