自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

報表集成那點事

企業(yè)動態(tài)
一般開源的報表,大都作為中間件產品提供給開發(fā)者,集成方法也比較統(tǒng)一,通常都是嵌入到系統(tǒng)中自行調用API開發(fā)與集成,但開源的幫助文檔或全或不全,都靠自己找資料,就要拼學習能力了。在商用收費報表中,潤乾報表也采用的是中間件方式,下面我們以潤乾報表為例來進一步了解一下。

[[222673]]

報表工具作為信息管理、決策分析系統(tǒng)不可或缺的部分,在項目中經常用到,市面上的報表工具各式各樣,在集成策略上,每個產品也都有自己特有的打開方式。不過,從門派上看,常見的無外乎中間件,servlet應用兩大門派。一般開源的報表,大都作為中間件產品提供給開發(fā)者,集成方法也比較統(tǒng)一,通常都是嵌入到系統(tǒng)中自行調用API開發(fā)與集成,但開源的幫助文檔或全或不全,都靠自己找資料,就要拼學習能力了。在商用收費報表中,潤乾報表也采用的是中間件方式,下面我們以潤乾報表為例來進一步了解一下:

潤乾報表為了方便開發(fā)者使用,在滿足大多數通用的需求的同時,實現(xiàn)零編程,潤乾報表利用tag標簽進行了封裝,如下就是一個發(fā)布潤乾報表的jsp文件:

 

  1. <%@ taglib uri=”/WEB-INF/raqsoftReport.tld” prefix=”report” %>  
  2. <html>  
  3. <body topmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0>  
  4. <report:html name=”report1″ srcType=”file” reportFileName=”wangge.rpx”…/>  
  5. </body>  
  6. </html> 

 

 

可以看到,在這個jsp中用到一個<prefix:html>標簽來發(fā)布html報表,與struts標簽使用類似,其中reportFileName就是需要發(fā)布的報表文件名,發(fā)布報表的同時,實現(xiàn)了導出,分頁,打印功能

jc1

如果把WEB應用比作一臺機器,那報表就是這臺機器諸多功能模塊里的一塊,tag標簽就是一個個小零件,你把這個小零件扣在哪個jsp文件中,報表就在哪里展現(xiàn)。 

jc2

報表作為中間件集成到其他應用系統(tǒng)里,與這個應用系統(tǒng)就成為了一個整體,但也有分家的做法,比如業(yè)界比較常見的servlet應用—— 

jc3

在這里,報表應用是一個獨立的應用,在其他應用頁面里嵌入一個JFrame,然后通過url請求報表的servlet,報表名作為參數傳遞給報表應用,報表應用將計算以后生成的html報表返回。

那這個時候,我們的程序猿要問了,瀏覽報表明白了,那如果報表需要傳參呢? 別著急,我們再來模擬一下兩種集成方式在給報表傳參上有啥區(qū)別:

中間件方式

我們還是拿潤乾報表的tag標簽來看:

 

  1. <%@ taglib uri=”/WEB-INF/raqsoftReport.tld” prefix=”report” %>  
  2. <html>  
  3. <body topmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0>  
  4. <report:html name=”report1″ srcType=”file” reportFileName=”wangge.rpx”  
  5. params=“arg1=123;arg2=abc;……“  
  6. …  
  7. />  
  8. </body>  
  9. </html> 

 

 

Tag標簽中有個params屬性,可以通過這個屬性給參數賦值,如果參數值靈活變化,當然屬性值也可以通過變量傳遞,這個不多說,程序猿都懂的。

Servlet的方式

JFrame中請求報表servlet的URL就要改成:

http://ip:port/report/reportservlet?參數=報表&arg1=123&arg2=’abc’&…

這時,我知道我們經驗豐富的程序猿又要質疑了:首先,引入了JFrame來加載報表,多一次數據請求;再次,參數在url里都是明文顯示的,安全報警啊,特別集成權限時會比較麻煩!除此之外,web服務與報表服務在不同的進程里,不管是不是在同一臺物理服務器,都會多占用硬件資源,當應用出現(xiàn)異常時,排錯也麻煩,增加運維難度。所以,潤乾報表雖然也支持servlet發(fā)布報表的方式,但我們也不建議大家這樣使用。 

前面我們講了潤乾報表作為中間件集成,那么這個中間件到底集成了什么到應用系統(tǒng)中?很簡單,就是jar包,xml配置文件及jsp的tag描述文件tld。

Jar包引入到應用程序中,不僅提供了tag標簽零代碼計算展示、打印報表,也為開發(fā)者在自己的項目中自行調用報表API接口實現(xiàn)報表的計算,分頁,導出,打印等過程提供了方便,例如使用代碼計算發(fā)布一個報表:

 

  1. //讀報表  
  2. String reportFile = “C:/reportFiles/wangge.rpx”;  //絕對路徑或相對當前程序啟動路徑  
  3. ReportDefine rd = (ReportDefine)ReportUtils.read( reportFile );  
  4. //計算報表  
  5. Context cxt = new Context();  //構建報表引擎計算環(huán)境  
  6. //…………………….. //其它輔助代碼,例如往報表引擎?zhèn)鬟f參數,傳遞數據庫連接參數等ReportDefine rd = (ReportDefine)ReportUtils.read( reportFile );  
  7. Engine engine = new Engine(rd, cxt);  //構造報表引擎  
  8. IReport iReport = engine.calc();  //運算報表  
  9. //輸出到網頁,展現(xiàn)報表  
  10. String htmlText = ReportUtils.toHTMLString(iReport,”report1″,request);  //生成html語法  
  11. request.setAttribute(“htmlText”, htmlText); //保存到request里,方便頁面上顯示  

 

當然,這里只是講一個簡單例子,API屬于進階集成,更深入的學習請參考潤乾的開發(fā)教程。這例子雖然簡單,但我相信大家已經體會到了她的靈活性、輕量性,而單一的servlet URL方式集成如果要二次開發(fā),僅兩個系統(tǒng)的數據通訊就是一大難題。 所以基于這種方式集成的報表,要么由開發(fā)者想辦法解決,要么就是把報表服務做成了一個平臺——囊括了數據決策展示、權限管理、報表管理等等看起來牛叉,但跟自己業(yè)務系統(tǒng)相結合時又是雞肋的一堆子業(yè)務系統(tǒng)。

便利、靈活、輕量為報表開發(fā)節(jié)約成本提供了基礎,隨著業(yè)務的提升,高效、高可用性也是考核報表系統(tǒng)的重要部分。因此集群也是集成部署的一個重要環(huán)節(jié),那接下來我們繼續(xù)來看,這兩種集成方式在集群上又有啥區(qū)別,先上兩個結構圖—— 

中間件嵌入到web應用里,與web應用是一個整體,所以web應用做完集群,那么報表也就做完了集群。 

jc4

而Servlet URL的方式,那集群就相當于分成了兩套,各自做自己的集群,也就是報表是一個集群,web應用是一個集群。

jc5

從以上的部署結構可以看出,中間件的方式在集群上更簡單些。所需要的配置及硬件資源都要少不少。

到此報表的集成基本就講完了,優(yōu)缺點都做了一個比較,您的應用需要哪一種呢? 

責任編輯:龐桂玉 來源: 潤乾
相關推薦

2012-02-22 09:32:58

云計算微軟Azure

2011-04-14 14:23:06

軟件測試測試

2011-05-25 19:37:47

2021-07-30 07:28:15

Kafka消息引擎

2012-06-11 15:02:53

ASP.NET

2018-04-02 15:10:17

ToastSnackbarAndroid

2013-04-28 09:50:02

PHPMySQL

2015-09-01 15:12:45

JavaHashMap那點事

2023-12-21 20:53:15

2010-08-10 15:08:17

UPS電源評測

2009-07-03 14:16:30

JSP Servlet

2013-10-12 13:26:08

設計加載

2011-08-31 10:15:48

桌面管理軟件

2019-07-01 14:55:44

應用安全web安全滲透測試

2011-02-22 09:47:58

WatchStor 征

2011-05-24 16:20:27

虛函數

2013-04-09 10:03:29

iOS6.0旋轉兼容

2010-05-31 10:11:02

2011-08-30 14:59:34

Qt數據庫

2015-05-29 09:37:04

點贊
收藏

51CTO技術棧公眾號