jasperreport学习官方例子:webapp

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

对于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 ) 
 

 

 

解释结束!

 

你可能感兴趣的:(tomcat,jsp,session,report,Parameters,webapp)