FineReport是一個純Java軟件,因此對于J2EE的項目,可以做到無縫集成。
報表服務器并非物理概念的服務器,而是以一個標準的J2EE應用的形式或者jar包的形式提交給程序。應用程序通過url來調用報表,或者通過開放的API來調用報表的各種功能,來實現更加靈活的控制。報表集成到應用程序后,即可作為一個統一完整的程序來進行發布。
同時無縫集成還能夠使報表與應用程序使用同一個數據庫連接池,或進行集群,負載均衡等,提高報表的運行效率,原理圖如圖1所示:

圖1 Java項目集成原理圖
報表工程目錄結構
在說明配置FineReport服務器之前,我們先了解一下FineReport應用服務的目錄結構:

對上圖的目錄層次結構我們做一些說明:
WebReport:可以看到所有的相關文件都包含在WebReport這個服務器應用工程中,也就是說WebReport是我們默認的工程名,此項名字可以修改。
WEB-INF:WEB-INF目錄是J2EE服務器中默認規定的,全稱是Web Information。
classes:classes 文件夾也是應用服務器默認規定的。主要作用是存放.class文件,例如在FineReport中,如果要使用"自定義函數","程序數據源"和"程序網 絡報表"等功能,必需先使用我們提供的接口來編寫.java文件,然后將編譯后產生的.class文件存放到該目錄下。
lib:lib 也是應用服務器規定的目錄結構。FineReport該目錄下主要包括fr-server-6.5.jar,第三方類的jar文件和一些常用數據庫 JDBC驅動,比如ojdbc14.jar就是Oracle數據庫的驅動,應用服務器在啟動的時候會自動將lib目錄下所有的.jar文件加載到系統的 classpath中;fr-server-6.5.jar包含了FineReport服務器的所有功能,它是由FineReport源文件編譯后產生 的.class類文件。例如:Servlet類com.fr.web.ReportServlet便位于fr-server-6.5.jar中。
reportlets:reportlets是FineReport服務器默認規定的,不能修改。可以在這個目錄下面建立子目錄文件夾,FineReport設計器設計的模板一般都保存在這個目錄或者它的子目錄下面,以便FineReport服務器調用。
resources:resources 是FineReport服務器默認規定的,不能修改。下面保存了一些.xml文件,這些.xml文件里面保存著FineReport服務器的配置等信 息,FineReport服務器啟動的時候,會自動加載這些.xml文件(有些xml文件不是運行必需的)。
web.xml:這個文件也是J2EE服務器所規定必須建立的,我們在此文件中定義了FineReport的SERVLET的解析路徑方式,權限加載等一些內容,此文件初始配置內容如下:
1. <?xml version="1.0" encoding="UTF-8"?>
2. <web-app 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" version="2.4">
3. <servlet>
4. <servlet-name>ReportServer</servlet-name>
5. <servlet-class>com.fr.web.ReportServlet</servlet-class>
6. <load-on-startup>0</load-on-startup>
7. </servlet>
8. <servlet-mapping>
9. <servlet-name>ReportServer</servlet-name>
10.<url-pattern>/ReportServer</url-pattern>
11.</servlet-mapping>
12.</web-app>
報表集成步驟
1、 服務器部署
FineReport報表是一個Servlet應用。大 家知道,Servlet是一種服務器端的Java應用程序,具有獨立于平臺和協議的特性,可以生成動態的Web頁面。 它擔當客戶請求(Web瀏覽器或其他HTTP客戶程序)與服務器響應(HTTP服務器上的數據庫或應用程序)的中間層。 Servlet是位于Web 服務器內部的服務器端的Java應用程序,由Web服務器進行加載,該Web服務器必須包含支持Servlet的Java虛擬機。
因此FineReport報表必須部署在Web應用服務器如Tomcat、Weblogic、Websphere等下面,啟動Web應用服務器時就會加載FineReport報表這個Servlet,從而交互式地瀏覽和修改數據,整個過程如下:

報表部署分為兩種,一是報表作為一個獨立的應用獨立部署;或者是集成到現有應用即嵌入式部署。不管哪種部署方式,他們的目錄結構都是類似的。
如下圖我們對未包含報表的應用及包含報表的應用目錄作一個比較:

1.1獨立部署
FineReport安裝目錄下的WebReport目錄就是一個標準的應用,因此,若用戶希望將報表作為一個獨立的應用進行部署的話,可以直接使用WebReport目錄進行發布。
1.2嵌入式部署
若用戶希望將報表集成到自己的應用中的話,則可以對應上圖“部署報表后的應用”目錄結構,將對應的報表文件拷貝到相應目錄即可。
2、 頁面集成
用戶系統的網頁可能由不同的語言開發,如HTML、ASP、JSP、PHP等。FineRepor報表可以通過Frame框架集成到Web頁面中,指定Frame的src即可。
例:<iframe id="reportFrame" width="900" height="400" src="/WebReport/ReportServer?reportlet=/doc/Primary/Parameter/Parameter.cpt"></iframe>
另外頁面集成中的一些常見應用:動態傳參、自定義參數界面、自定義工具欄、頁面布局等;可以參考FR在線幫助手冊。
3、 權限集成
3.1、FR權限流程圖

3.2、豐富的權限認證方式
FineReport為了保證權限功能的通用性,提供了多種認證方式,其總體架構圖如圖

圖2 FineReport權限總體架構圖
3.3、權限粒度
很多系統的權限認證只是限制模塊的使用,使得合法用戶能夠行使自己的權利。FineReport在滿足這種整體權限認證的同時,權限的控制力度可以達到同一張報表的內容在不同權限下展示的效果不一樣,這樣就免除了制作大量的報表來實現同樣效果,尤其是在企業內部業務繁雜,審批麻煩時,一張報表就可以解決所有問題。
3.4、靈活的權限集成
伴隨著國內信息技術的高速發展,越來越多的政府和企事業單位使用信息管理系統來管理日常的工作生產,但是每個系統應用都有自己的權限體系模型,經常會出現一個用戶在好幾個系統應用里面都有設置,這樣就產生了兩個問題:1:用戶每訪問一個系統,都要登錄一次,既繁瑣又要用戶記憶很多的用戶名和密碼;2:加大了對日常的組織分配和人員變更的維護的復雜性和高成本性。
FineReport提供的權限認證,可以靈活的與其它系統進行統一認證,實現單點登錄。
當我們按照上面的三種類型的身份驗證方式配置好相應權限后,需要將報表和相應的系統進行集成,我們采取的方式是:
1:當客戶登錄時通過FR登錄接口傳遞相應的用戶名和密碼給我們報表系統;
2:報表系統會匹配報表用戶數據集中的用戶名和傳遞過來的用戶名,然后識別登錄用戶的角色,并根據角色綁定相應的權限;
3:把角色存儲在session里面,這樣用戶訪問每張報表時,報表權限都會先和session進行驗證,滿足的話就直接進行相應權限的操作,不滿足的話則會提示沒有權限。
具體的實現過程如圖3所示:

圖3 權限集成示意圖
注:FR報表登錄接口:http://../ReportServer?op=auth_login;
FR報表登出接口:http://../ReportServer?op=auth_logout;
總結
FineReport同樣作為J2EE的一個應用,可以跟任何J2EE架構的工程進行完美的無縫集成。
如有任何疑惑,FR竭誠為您服務。