FineReport是一個純Java軟件,因此對于J2EE的項目,可以做到無縫集成。
報表服務(wù)器并非物理概念的服務(wù)器,而是以一個標準的J2EE應(yīng)用的形式或者jar包的形式提交給程序。應(yīng)用程序通過url來調(diào)用報表,或者通過開放的API來調(diào)用報表的各種功能,來實現(xiàn)更加靈活的控制。報表集成到應(yīng)用程序后,即可作為一個統(tǒng)一完整的程序來進行發(fā)布。
同時無縫集成還能夠使報表與應(yīng)用程序使用同一個數(shù)據(jù)庫連接池,或進行集群,負載均衡等,提高報表的運行效率,原理圖如圖1所示:
圖1 Java項目集成原理圖
報表工程目錄結(jié)構(gòu)
?????? 在說明配置FineReport服務(wù)器之前,我們先了解一下FineReport應(yīng)用服務(wù)的目錄結(jié)構(gòu):
對上圖的目錄層次結(jié)構(gòu)我們做一些說明:
WebReport:可以看到所有的相關(guān)文件都包含在WebReport這個服務(wù)器應(yīng)用工程中,也就是說WebReport是我們默認的工程名,此項名字可以修改。
WEB-INF:WEB-INF目錄是J2EE服務(wù)器中默認規(guī)定的,全稱是Web Information。
classes:classes 文件夾也是應(yīng)用服務(wù)器默認規(guī)定的。主要作用是存放.class文件,例如在FineReport中,如果要使用"自定義函數(shù)","程序數(shù)據(jù)源"和"程序網(wǎng) 絡(luò)報表"等功能,必需先使用我們提供的接口來編寫.java文件,然后將編譯后產(chǎn)生的.class文件存放到該目錄下。
lib:lib 也是應(yīng)用服務(wù)器規(guī)定的目錄結(jié)構(gòu)。FineReport該目錄下主要包括fr-server-6.5.jar,第三方類的jar文件和一些常用數(shù)據(jù)庫 JDBC驅(qū)動,比如ojdbc14.jar就是Oracle數(shù)據(jù)庫的驅(qū)動,應(yīng)用服務(wù)器在啟動的時候會自動將lib目錄下所有的.jar文件加載到系統(tǒng)的 classpath中;fr-server-6.5.jar包含了FineReport服務(wù)器的所有功能,它是由FineReport源文件編譯后產(chǎn)生 的.class類文件。例如:Servlet類com.fr.web.ReportServlet便位于fr-server-6.5.jar中。
reportlets:reportlets是FineReport服務(wù)器默認規(guī)定的,不能修改??梢栽谶@個目錄下面建立子目錄文件夾,F(xiàn)ineReport設(shè)計器設(shè)計的模板一般都保存在這個目錄或者它的子目錄下面,以便FineReport服務(wù)器調(diào)用。
resources:resources 是FineReport服務(wù)器默認規(guī)定的,不能修改。下面保存了一些.xml文件,這些.xml文件里面保存著FineReport服務(wù)器的配置等信息,F(xiàn)ineReport服務(wù)器啟動的時候,會自動加載這些.xml文件(有些xml文件不是運行必需的)。
web.xml:這個文件也是J2EE服務(wù)器所規(guī)定必須建立的,我們在此文件中定義了FineReport的SERVLET的解析路徑方式,權(quán)限加載等一些內(nèi)容,此文件初始配置內(nèi)容如下:
1.?????
2.????
3.???
4.?ReportServer??
5.?com.fr.web.ReportServlet??
6.?0??
7.????
8.???
9.?ReportServer???
10./ReportServer??
11.??
12.??
報表集成步驟
1、? 服務(wù)器部署
FineReport報表是一個Servlet應(yīng)用。大 家知道,Servlet是一種服務(wù)器端的Java應(yīng)用程序,具有獨立于平臺和協(xié)議的特性,可以生成動態(tài)的Web頁面。 它擔當客戶請求(Web瀏覽器或其他HTTP客戶程序)與服務(wù)器響應(yīng)(HTTP服務(wù)器上的數(shù)據(jù)庫或應(yīng)用程序)的中間層。 Servlet是位于Web 服務(wù)器內(nèi)部的服務(wù)器端的Java應(yīng)用程序,由Web服務(wù)器進行加載,該Web服務(wù)器必須包含支持Servlet的Java虛擬機。
因此FineReport報表必須部署在Web應(yīng)用服務(wù)器如Tomcat、Weblogic、Websphere等下面,啟動Web應(yīng)用服務(wù)器時就會加載FineReport報表這個Servlet,從而交互式地瀏覽和修改數(shù)據(jù),整個過程如下:
報表部署分為兩種,一是報表作為一個獨立的應(yīng)用獨立部署;或者是集成到現(xiàn)有應(yīng)用即嵌入式部署。不管哪種部署方式,他們的目錄結(jié)構(gòu)都是類似的。
如下圖我們對未包含報表的應(yīng)用及包含報表的應(yīng)用目錄作一個比較:
?????? 1.1獨立部署
FineReport安裝目錄下的WebReport目錄就是一個標準的應(yīng)用,因此,若用戶希望將報表作為一個獨立的應(yīng)用進行部署的話,可以直接使用WebReport目錄進行發(fā)布。
?????? 1.2嵌入式部署
若用戶希望將報表集成到自己的應(yīng)用中的話,則可以對應(yīng)上圖“部署報表后的應(yīng)用”目錄結(jié)構(gòu),將對應(yīng)的報表文件拷貝到相應(yīng)目錄即可。
2、? 頁面集成
用戶系統(tǒng)的網(wǎng)頁可能由不同的語言開發(fā),如HTML、ASP、JSP、PHP等。FineRepor報表可以通過Frame框架集成到Web頁面中,指定Frame的src即可。
例:??
另外頁面集成中的一些常見應(yīng)用:動態(tài)傳參、自定義參數(shù)界面、自定義工具欄、頁面布局等;可以參考FR在線幫助手冊。
3、? 權(quán)限集成
3.1、FR權(quán)限流程圖
3.2、豐富的權(quán)限認證方式
FineReport為了保證權(quán)限功能的通用性,提供了多種認證方式,其總體架構(gòu)圖如圖
圖2 FineReport權(quán)限總體架構(gòu)圖
3.3、權(quán)限粒度
??????? 很多系統(tǒng)的權(quán)限認證只是限制模塊的使用,使得合法用戶能夠行使自己的權(quán)利。FineReport在滿足這種整體權(quán)限認證的同時,權(quán)限的控制力度可以達到同一張報表的內(nèi)容在不同權(quán)限下展示的效果不一樣,這樣就免除了制作大量的報表來實現(xiàn)同樣效果,尤其是在企業(yè)內(nèi)部業(yè)務(wù)繁雜,審批麻煩時,一張報表就可以解決所有問題。
3.4、靈活的權(quán)限集成
伴隨著國內(nèi)信息技術(shù)的高速發(fā)展,越來越多的政府和企事業(yè)單位使用信息管理系統(tǒng)來管理日常的工作生產(chǎn),但是每個系統(tǒng)應(yīng)用都有自己的權(quán)限體系模型,經(jīng)常會出現(xiàn)一個用戶在好幾個系統(tǒng)應(yīng)用里面都有設(shè)置,這樣就產(chǎn)生了兩個問題:1:用戶每訪問一個系統(tǒng),都要登錄一次,既繁瑣又要用戶記憶很多的用戶名和密碼;2:加大了對日常的組織分配和人員變更的維護的復雜性和高成本性。
FineReport提供的權(quán)限認證,可以靈活的與其它系統(tǒng)進行統(tǒng)一認證,實現(xiàn)單點登錄。
當我們按照上面的三種類型的身份驗證方式配置好相應(yīng)權(quán)限后,需要將報表和相應(yīng)的系統(tǒng)進行集成,我們采取的方式是:
1:當客戶登錄時通過FR登錄接口傳遞相應(yīng)的用戶名和密碼給我們報表系統(tǒng);
2:報表系統(tǒng)會匹配報表用戶數(shù)據(jù)集中的用戶名和傳遞過來的用戶名,然后識別登錄用戶的角色,并根據(jù)角色綁定相應(yīng)的權(quán)限;
3:把角色存儲在session里面,這樣用戶訪問每張報表時,報表權(quán)限都會先和session進行驗證,滿足的話就直接進行相應(yīng)權(quán)限的操作,不滿足的話則會提示沒有權(quán)限。
具體的實現(xiàn)過程如圖3所示: