張少應(yīng),張 濤
(西安航空學(xué)院 計算機(jī)學(xué)院,西安 710077)
隨著信息化建設(shè)的不斷發(fā)展,企業(yè)各下屬部門建立了各種功能的管理系統(tǒng),給企業(yè)的生產(chǎn)和銷售帶來了很大的幫助和便利,但這些系統(tǒng)存在架構(gòu)差異較大、系統(tǒng)間數(shù)據(jù)不關(guān)聯(lián)、信息不互換共享、重復(fù)建設(shè)等問題。同時企業(yè)對數(shù)據(jù)的應(yīng)用和要求越來越廣泛,企業(yè)開始將各類同構(gòu)和異構(gòu)的數(shù)據(jù)進(jìn)行集成,使得數(shù)據(jù)量按級數(shù)增加,導(dǎo)致數(shù)據(jù)檢索與分析困難。針對上述問題,系統(tǒng)開發(fā)人員通常采用數(shù)據(jù)倉庫、數(shù)據(jù)挖掘、聯(lián)機(jī)分析、應(yīng)用集成等技術(shù),對海量數(shù)據(jù)進(jìn)行分析處理,為管理層政策決策提供可靠的依據(jù)。在Web應(yīng)用程序中,數(shù)據(jù)統(tǒng)計已從單純的文本顯示向多元化角度發(fā)展[1]。使用報表、圖表顯示的方式,更直觀地為管理層進(jìn)行信息預(yù)測、政策制定提供可靠的保障,實(shí)現(xiàn)數(shù)據(jù)的可視化。
Java語言是企業(yè)級開發(fā)中常選的開發(fā)語言之一,目前在Java Web應(yīng)用程序中使用的圖表生成技術(shù)有兩種:一是基于HTML5圖形庫的圖表組件(客戶端生成技術(shù));二是基于服務(wù)器端生成技術(shù)。這兩種技術(shù)針對多種格式的數(shù)據(jù),為用戶提供了可以高度個性化定制的數(shù)據(jù)可視化圖表,基本都能滿足企業(yè)級開發(fā)的需求。
在B/S應(yīng)用系統(tǒng)開發(fā)中,基于客戶端生成技術(shù)通常采用Flash插件、基于HTML5的Canvas組件采用JavaScript+DIV等前臺開發(fā)技術(shù),結(jié)合Ajax的異步更新工作方式,在不重新加載整個頁面的情況下,實(shí)現(xiàn)與服務(wù)器交換數(shù)據(jù),并更新部分網(wǎng)頁內(nèi)容。其工作原理如圖1所示。
圖1 基于客戶端生成技術(shù)的工作原理
目前比較流行的技術(shù)有ECharts、Hightcharts等。這些軟件大多都是純JavaScript編寫的圖表庫,底層依賴輕量級的Canvas類庫,為用戶提供直觀、可交互、可高度個性化定制的數(shù)據(jù)可視化圖表[2-3]。使用該技術(shù)進(jìn)行開發(fā)時,需要在頁面中引入該技術(shù)對應(yīng)的庫文件以及自定義的JavaScript文件,在頁面添加一個DIV元素,作為放置圖表展示的容器;設(shè)置圖表類型配置項(xiàng)的參數(shù)值和圖表的渲染;定義解析函數(shù),完成處理XML、JSON格式數(shù)據(jù)的JavaScript加載文件,實(shí)現(xiàn)以圖表形式顯示業(yè)務(wù)邏輯數(shù)據(jù)的功能。
基于服務(wù)器端的生成技術(shù),通常都是采用Java技術(shù)開發(fā)的圖形圖表類庫,供Java Applets、Servlets以及JSP應(yīng)用程序的調(diào)用,實(shí)現(xiàn)對后臺數(shù)據(jù)的處理,直接在瀏覽器中顯示交互式的圖表圖像,其工作原理如圖2所示。
圖2 基于服務(wù)器端生成技術(shù)的工作原理圖
目前比較流行的技術(shù)有JFreeChart[4-5]、JCharts、潤乾報表等,它們大多都使用純Java語言編寫,繼承其跨平臺的特性,在基于框架開發(fā)、MVC開發(fā)模式等Java Web應(yīng)用程序中,都可以無縫的與該系統(tǒng)集成,為企業(yè)級數(shù)據(jù)分析與商業(yè)智能提供可靠的、直觀的統(tǒng)計分析圖表,為企業(yè)管理者的決策提供必要的參考。
使用該技術(shù)進(jìn)行開發(fā)時,用戶需要在項(xiàng)目中導(dǎo)入該技術(shù)對應(yīng)的JAR庫文件,在Java類文件(JavaBean或Servlet)中,調(diào)用JAR文件中接口或類提供的方法,建立與后臺數(shù)據(jù)庫服務(wù)器交互的數(shù)據(jù)源;創(chuàng)建圖表對象,設(shè)置圖表類型項(xiàng)參數(shù)、圖形特性、顯示外觀等屬性值;使用JSP的動作標(biāo)記,完成JSP頁面對Java類文件的調(diào)用,實(shí)現(xiàn)業(yè)務(wù)邏輯數(shù)據(jù)以圖表形式的直觀顯示。
在Java應(yīng)用開發(fā)中,兩種技術(shù)都可以同后臺數(shù)據(jù)庫進(jìn)行交互,在Web應(yīng)用程序中生成折線圖、餅狀圖、曲線圖、散點(diǎn)圖等各類動態(tài)統(tǒng)計圖,為用戶提供直觀的數(shù)據(jù)顯示模式;設(shè)置鼠標(biāo)點(diǎn)擊時數(shù)據(jù)點(diǎn)顯示提示的效果,縮放過濾按需查看細(xì)節(jié),實(shí)現(xiàn)圖形的渲染等功能。但這兩種技術(shù)存在差異,主要表現(xiàn)在下述方面。
1.3.1 數(shù)據(jù)加載過程
在客戶端生成技術(shù)中,一般都采用Ajax實(shí)現(xiàn)動態(tài)數(shù)據(jù)的加載,其具體過程為:客戶端通過Ajax發(fā)送請求給Web服務(wù)器,服務(wù)器端通過Servlet接收用戶的請求,生成JSON格式的數(shù)據(jù)后,將結(jié)果反饋給客戶端。客戶端接收到數(shù)據(jù),通過JavaScript的解析函數(shù)對JSON數(shù)據(jù)處理后,繪制出滿足用戶查詢條件的統(tǒng)計圖表。
在服務(wù)器端生成技術(shù)中,數(shù)據(jù)庫訪問層的Java類直接調(diào)用圖形圖表類庫中的接口或類,通過這些類提供的方法建立數(shù)據(jù)源。使用SQL或HQL語句操作后臺數(shù)據(jù)庫,完成對查詢數(shù)據(jù)的篩選。業(yè)務(wù)邏輯層通過調(diào)用數(shù)據(jù)庫訪問層的Java類、圖形圖表類庫提供的方法,完成對統(tǒng)計圖表的渲染。表示層通過JavaBean或者Servlet完成對業(yè)務(wù)邏輯層類的調(diào)用,實(shí)現(xiàn)圖表的正常顯示。
同服務(wù)器端技術(shù)相比,絕大多數(shù)客戶端技術(shù)都需要將后臺數(shù)據(jù)進(jìn)行二次處理(生成JSON、XML格式),客戶端接收到這些數(shù)據(jù)后,需重新解析后才能生成圖表,增加了編碼的難度。而服務(wù)器端技術(shù)直接操作后臺數(shù)據(jù)庫,生成對應(yīng)的數(shù)據(jù)集或單元格數(shù)據(jù),處理效率高。
1.3.2 運(yùn)行加載速度
使用服務(wù)器端生成技術(shù)開發(fā)的應(yīng)用程序,大多都采用胖服務(wù)器架構(gòu)形式,服務(wù)器的性能、訪問內(nèi)容的冗余程度、網(wǎng)速帶寬和流量問題,影響圖表生成和瀏覽。在移動客戶端訪問時,圖表顯示會浪費(fèi)大量流量,使得圖表加載的速度比較慢。而客戶端生成技術(shù)中,Web應(yīng)用程序多采用瘦服務(wù)器架構(gòu),與圖表處理相關(guān)的好多代碼需在客戶端完成,Ajax技術(shù)的使用,使得不同的Ajxa請求在服務(wù)器端處理時間和客戶端處理時間上可能存在重疊部分,實(shí)現(xiàn)了服務(wù)器和瀏覽器并行工作[6],提升了網(wǎng)頁的加載渲染速度。隨著Adobe Flex技術(shù)在Web開發(fā)中應(yīng)用,越來越多的B/S結(jié)構(gòu)Web應(yīng)用程序,都采用胖客戶端的形式,使這些Web應(yīng)用程序的加載速度得到了明顯地提升。在服務(wù)器性能、處理數(shù)據(jù)量、查詢條件相同的條件下,其運(yùn)行加載速度明顯快于服務(wù)器端生成技術(shù)。
1.3.3 瀏覽器支持情況
基于客戶端實(shí)現(xiàn)中,都會使用到圖形容器Canvas類庫,而對于低版本的瀏覽器一般都不支持該類庫,使得圖形的顯示效果受到明顯影響。例如,Echarts組件在360、IE8瀏覽器中不兼容,部分功能不能正常顯示?;诜?wù)器端實(shí)現(xiàn)中,雖然圖表生成代碼都在業(yè)務(wù)邏輯層和數(shù)據(jù)庫訪問層完成,但該技術(shù)在部分瀏覽器中兼容性較差。例如,JFreeChart在低版本的IE瀏覽器中就不能正常顯示統(tǒng)計圖。
在使用Java語言進(jìn)行企業(yè)級應(yīng)用開發(fā)中,大多都采用Struts2.x、Spring4和Hibernate4(簡稱SSH2)框架集成[7]的方法來進(jìn)行系統(tǒng)開發(fā)。這種系統(tǒng)結(jié)構(gòu)成熟、性能良好、運(yùn)行穩(wěn)定,是目前許多企業(yè)級開發(fā)中首選的結(jié)構(gòu)之一。選用框架集成的實(shí)施方案,可以更好地與采用框架集成技術(shù)系統(tǒng)的整合,降低開發(fā)的難度,具體實(shí)施方案如圖3所示。
方案采用面向接口編程的思想,DAO實(shí)現(xiàn)與數(shù)據(jù)庫的交互,完成對底層數(shù)據(jù)庫的持久化;Service為控制器提供服務(wù),完成對DAO的封裝,使得控制器實(shí)現(xiàn)無需直接訪問DAO方法,而是調(diào)用業(yè)務(wù)邏輯的方法;Action實(shí)現(xiàn)用戶界面與業(yè)務(wù)邏輯的交互。在該方案中,Spring的IoC容器負(fù)責(zé)管理業(yè)務(wù)邏輯組件、控制層組件以及持久層組件,利用依賴注入的優(yōu)勢,增強(qiáng)了系統(tǒng)的解耦,提高了系統(tǒng)擴(kuò)展性,降低了系統(tǒng)重構(gòu)的成本[8]。DAO編程模式的使用,使得數(shù)據(jù)訪問操作集中獨(dú)立在一層完成,在應(yīng)用集成中,開發(fā)人員很容易在不同數(shù)據(jù)庫之間切換,獲取不同數(shù)據(jù)庫的數(shù)據(jù),提高了系統(tǒng)的可維護(hù)性和可移植性。
為更好的與現(xiàn)有系統(tǒng)整合,可針對不同開發(fā)模式,選用不同的整合方法。當(dāng)現(xiàn)有系統(tǒng)采用框架集成的方式,選用相同框架時可直接將該實(shí)施方案在系統(tǒng)中整合,以此完成不同數(shù)據(jù)源、統(tǒng)計圖顯示的設(shè)置;當(dāng)現(xiàn)有系統(tǒng)采用其他開發(fā)模式時,將該實(shí)施方案發(fā)布為一個Web Service,通過Web服務(wù)方式完成與現(xiàn)有系統(tǒng)的集成。
在基于服務(wù)器端統(tǒng)計表生成技術(shù)中(見圖3),開發(fā)人員需將圖表開發(fā)所需的JAR文件導(dǎo)入到Web工程中(以JFreeChart為例),為有效管理生成動態(tài)圖表,在web.xml中配置JFreeChart組件,通過該組件中的org.jfree.chart.servlet.DisplayChart類管理生成的圖片。在完成配置后,對來自不同應(yīng)用的同構(gòu)或異構(gòu)數(shù)據(jù)進(jìn)行整合,使用DAO模式創(chuàng)建JFreeChart圖表的數(shù)據(jù)集。在Action中創(chuàng)建JFreeChart對象,修改圖片的顯示屬性,美化圖片的顯示樣式,并以輸出流的方式獲取圖片。如果想在JSP頁面調(diào)用圖片,把圖片的src請求路徑設(shè)置為產(chǎn)生輸出流的Action即可,實(shí)現(xiàn)了與系統(tǒng)中其他功能模塊的無縫整合。
圖3 框架集成的實(shí)施方案示意圖
在具體實(shí)現(xiàn)時,為方便集成到新系統(tǒng),將連續(xù)不同數(shù)據(jù)源的基本信息(數(shù)據(jù)庫類型、用戶名、密碼等)存放在配置文件(.properties)中,使用Properties類完成數(shù)據(jù)源基礎(chǔ)信息的管理,驗(yàn)證不同類數(shù)據(jù)庫連接是否正常??紤]到繪制統(tǒng)計圖時對數(shù)據(jù)庫的單表、多表操作,需要分析選擇數(shù)據(jù)庫表的數(shù)據(jù)是否滿足統(tǒng)計條件。對Excel格式數(shù)據(jù)的處理,則選用Java的POI組件對所選文件中單元格數(shù)據(jù)的隨機(jī)讀和寫。
圖4 通用統(tǒng)計圖表生成技術(shù)的應(yīng)用
在通用統(tǒng)計圖表生成操作界面(見圖4)中,用戶可選擇不同數(shù)據(jù)源或?qū)隕xcel的數(shù)據(jù),配置圖表參數(shù)后,程序開發(fā)人員需要分析所選擇的數(shù)據(jù),判斷能否生成統(tǒng)計圖表。將該實(shí)施方案整合到現(xiàn)有系統(tǒng)中,開發(fā)人員無需進(jìn)行數(shù)據(jù)庫訪問層代碼編寫,只要根據(jù)新系統(tǒng)的操作流程和客戶需求,完成業(yè)務(wù)邏輯層代碼二次開發(fā),簡化了開發(fā)過程,提高了開發(fā)效率。
以直觀清晰的圖表展示企業(yè)生產(chǎn)過程中各個要素的數(shù)據(jù),為管理者決策提供可靠的參考,是企業(yè)級應(yīng)用開發(fā)中常用的功能模塊。基于客戶端統(tǒng)計圖表生成技術(shù)具有加載速度快、開發(fā)周期較短等優(yōu)勢,在數(shù)據(jù)處理難度較低的應(yīng)用開發(fā)中,很好地滿足了PC端和移動端的開發(fā)要求。而基于服務(wù)器端的統(tǒng)計圖表生成技術(shù)具有數(shù)據(jù)處理效率高、安全性較高的特點(diǎn),在同構(gòu)或異構(gòu)數(shù)據(jù)集成的應(yīng)用開發(fā)中,能夠很好地將不同應(yīng)用的數(shù)據(jù)以圖表形式,直觀地將統(tǒng)計數(shù)據(jù)展現(xiàn)給用戶。在服務(wù)器端統(tǒng)計圖表生成技術(shù)中,使用SSH2框架集成技術(shù)和DAO編程模式設(shè)計的實(shí)施方案,具有開發(fā)難度低、維護(hù)效率高、系統(tǒng)可擴(kuò)展性強(qiáng)的優(yōu)勢,在系統(tǒng)集成開發(fā)中,具有推廣價值。