1. 程式人生 > >jasperreport學習官方例子:webapp

jasperreport學習官方例子:webapp

學習開源專案的最好辦法:通過學習官方例子。當然,在這之前最好看看關於這個開源專案是什麼東東,有什麼基本概念。

對於jasperreport,建議先看看官網裡面的這篇文章:

一、將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檔案不是線上完成的,線上下完成;而且不容易改變的!

將資料渲染到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) 
 

解釋結束!