您的位置:首页 > 移动开发 > WebAPP

jasperreport学习官方例子:webapp

2011-10-28 11:41 211 查看
学习开源项目的最好办法:通过学习官方例子。当然,在这之前最好看看关于这个开源项目是什么东东,有什么基本概念。

对于jasperreport,建议先看看官网里面的这篇文章:

http://jasperforge.org/projects/jasperreports



一、将webapp部署到tomcat上

首先,要run一下ant对应的build.xml文件

看一下主要是做了以下两个事情:

1、将一些需要的jar文件拷贝到lib目录下(注意执行build操作时,这个webapp目录必须要在原来的目录下,或者需要修改build.xml文件里面的部分目录参数)

2、编译class目录下java文件

当然,还可以打包的,但是发现这个功能在这个build.xml中有点问题,所以索性复制整个目录到tomcat里面算了!

到此为止,我们可以通过这个build.xml文件可以学习到这个webapp需要什么lib的支持!

然后,就是复制目录了

最后,就是启动tomcat。

二、通过webapp学习报表生成的过程

步骤一:compile JRXML

例子原来在reports目录就有一个WebappReport.jrxml文件(一个xml文件)

这个步骤完成的就是将WebappReport.jrxml文件编译成一个对应的WebappReport.jasper

示例中分别用了两种方式,servlet和jsp,其实做的东西都差不多,不过个人推荐使用jsp。

下面就节选完成这个步骤的关键代码:

try

{

JasperCompileManager.compileReportToFile(context.getRealPath("/reports/WebappReport.jrxml"));

}

catch (JRException e)

{
注:在这种情况下,生成的jasper文件的目录与/WebappReport.jrxml一样

总结:一般编译jasper文件不是在线完成的,在线下完成;而且不容易改变的!

步骤二:fill report

将数据渲染到report模板中,得到一个JasperPrint对象

将这个JasperPrint对象放到session,以便后续处理!

关键代码以及分析:

try

{

String reportFileName = context.getRealPath("/reports/WebappReport.jasper");

File reportFile = new File(reportFileName);

if (!reportFile.exists())

throw new JRRuntimeException("File WebappReport.jasper not found. The report design must be compiled first.");

//parameters用来对原来jrxml中自定义的parameter进行赋值

Map parameters = new HashMap();

parameters.put("ReportTitle", "Address Report");

parameters.put("BaseDir", reportFile.getParentFile());

//里面的 new WebappDataSource()对象是数据的来源

JasperPrint jasperPrint =

JasperFillManager.fillReport(

reportFileName,

parameters,

new WebappDataSource()

);

//上面生成的JasperPrint对象可以理解成一个渲染了数据的report的包裹

request.getSession().setAttribute(BaseHttpServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);

}

catch (JRException e)


步骤三:export report

根据不同要求(文件格式),将JasperPrint对象以对应的文件格式显示出来。

比如说将report以pdf的方式:

//从session中取回jasperPrint对象

List jasperPrintList = BaseHttpServlet.getJasperPrintList(request);



62

63 if (jasperPrintList == null)



64 {



65 throw new ServletException("No JasperPrint documents found on the HTTP session.");



66 }



67



68 Boolean isBuffered = Boolean.valueOf(request.getParameter(BaseHttpServlet.BUFFERED_OUTPUT_REQUEST_PARAMETER));



69 if (isBuffered.booleanValue())



70 {

//生成输出器

71 JRPdfExporter exporter = new JRPdfExporter();



72 exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);



73

74 ByteArrayOutputStream baos = new ByteArrayOutputStream();



75 exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);



76



77 try



78 {

//输出

79 exporter.exportReport();



80 }



81 catch (JRException e)







解释结束!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: