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