林進 周棟 車翠琦 湯瓊
摘要:圖表是一種直觀、形象顯示數(shù)據(jù)的有效方式。該文以實際項目中問題為需求,在分析了JFreeChart組件結(jié)構(gòu)的基礎(chǔ)上,詳細介紹了其在J2EE平臺開發(fā)應用于Web的動態(tài)統(tǒng)計圖表的方法,該方法對此類圖表的開發(fā)有很好的參考價值。
關(guān)鍵詞:JFreeChart;JAVA;動態(tài)統(tǒng)計圖表
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2012)26-6253-03
Research and Development of Web Statistical Charts Based on JFreeChart
LIN Jin, ZHOU Dong, CHE Cui-qi, TANG Qiong
(College of Information&Technology, Zhejiang Chinese Medical University, Hangzhou 310053, China)
Abstract: The chart is a visual image of an effective way to display data. Based on the actual demand of a project , this paper in? troduces the method of dynamic charts in the J2EE platform development applied to Web in detail after analyzing the JFreeChart component structure,which has a good reference value for the development of such charts.
Key words: JFreeChart; JAVA; dynamic statistical charts
在J2EE平臺上開發(fā)Web應用的過程中,常會遇到繪制圖形的問題,生成基于瀏覽器的Web圖表技術(shù)也很多,而服務器端直接生成圖表的方式更適合于我們目前的需求。本文介紹的就是一個基于Java的圖表引擎JFreeChart,它可用在服務器端產(chǎn)生圖表,可以很好地解決圖形繪制問題。
JFreeChart是JFreeChart公司組織開發(fā)的一種基于JAVA語言的圖表開發(fā)技術(shù),也是開放源代碼站點SourceForge.net上的一個JAVA項目[1]。基本能夠解決目前的圖形方面的需求生成各種各樣的統(tǒng)計圖,包括餅狀圖、柱狀圖、折線圖、分布圖和混合圖等等。它生成的圖形可以PNG和JPEG文件格式保存,向網(wǎng)絡客戶瀏覽器傳送,也可以直接輸出到屏幕上。同時還可以與PDF和EXCEL關(guān)聯(lián),生成該格式的文件。
1 JFreeChart介紹
JFreeChart組件對繪制圖表的細節(jié)進行了封裝,它對外提供了繪制圖形及設(shè)置圖形屬性的接口與方法。因此,在JFreeChart組件的使用過程中,不必關(guān)心它所繪制的圖形報表是如何實現(xiàn)的,只需要了解JFreeChart組件的結(jié)構(gòu)及核心對象。
JFreeChart組件的核心對象有:制圖對象、制圖工廠對象、數(shù)據(jù)集合對象、繪圖區(qū)對象、坐標軸對象和、圖片渲染對象[2]。
一般產(chǎn)生圖表的流程如圖1所示。
2系統(tǒng)框架設(shè)計
本文介紹的圖表生成技術(shù)框架主要分為3層:表示層、控制層、數(shù)據(jù)層。表示層即外部頁面JSP和外部接口并用,主要職責就是為用戶提供信息以及把用戶指令翻譯傳送給控制層和數(shù)據(jù)層,在本文中主要是傳送參數(shù)并顯示JFreeChart生成的圖形;控制層是業(yè)務邏輯層,主要是對表示層傳送的請求加以處理并返回,根據(jù)JSP頁面?zhèn)鬟^來的參數(shù)和數(shù)據(jù)層提供的數(shù)據(jù)運用JFreeChart組件生成對應的圖形返回到JSP頁面;數(shù)據(jù)層是連接數(shù)據(jù)庫和處理數(shù)據(jù),為控制層生成圖形提供對應的數(shù)據(jù)合成數(shù)據(jù)集。表示層通過ajax向控制層發(fā)送請求,控制層接收請求并處理,根據(jù)action類中方法對數(shù)據(jù)層進行訪問,數(shù)據(jù)層對數(shù)據(jù)庫中的數(shù)據(jù)進行封裝處理,通過Spring、Struts在表示層輸出。系統(tǒng)技術(shù)框架如圖2所示。
3報表實現(xiàn)
3.1環(huán)境配置
本文報表的實現(xiàn)是基于SSM框架結(jié)構(gòu),主要用到的技術(shù)是:Spring、Struts2、mybatis,以SQL Server 2008為后臺數(shù)據(jù)庫。在使用JFreeChart之前,需要將其提供的JFreeChart組件、struts2-jfreechart-plugin、gwt-benchmark-viewer開發(fā)包文件添加到本地的開發(fā)類庫之中。
3.2圖表生成
本文通過JFreeChart應用于某科教信息管理系統(tǒng)的實例來研究JFreeChart的使用,主要需求包括各地市的相關(guān)項目的參加人數(shù)或各類費用統(tǒng)計的統(tǒng)計圖表。本文以柱狀圖為例顯示進修情況的人數(shù),以地市為單位。具體實現(xiàn)過程如下:
1)創(chuàng)建數(shù)據(jù)集對象CategoryDataset。此過程使用DatasetUtilities類的createCategoryDataset()方法進行創(chuàng)建,其方法需要3個參數(shù)(rowKeys,columnKeys, data)。其中rowKeys表示地市,columnKeys表示人數(shù), data表示填充柱狀圖所要的來自SQL Server 2008數(shù)據(jù)庫的進修情況維護表。
2)創(chuàng)建圖表對象JFreeChart。此過程使用ChartFactory工廠類里的createBarChart3D()方法進行創(chuàng)建,其方法需要提供8個參數(shù)( "標題",X,Y,dataset,PlotOrientation.VERTICAL,true,true,false)。其中分別代表:標題、橫坐標、縱坐標、數(shù)據(jù)集、圖標方向、顯示圖例、生成工具、啟用超鍵接。
3)創(chuàng)建圖表區(qū)域?qū)ο驝ategoryPlot。通過語句ValueAxis rangeAxis = plot. getRangeAxis()實現(xiàn)坐標軸對象。通過rangeAxis的set? UpperMargin()和setLowerMargin()方法來分別設(shè)置最高一個柱和圖片頂端的距離和最低一個柱和圖片底端的距離。
4)創(chuàng)建顯示圖表對象類型BarRenderer3D。為renderer設(shè)置一些屬性,如setBaseOutlinePaint設(shè)置基線顏色,setWallPaint設(shè)置柱的顏色,setItemMargin設(shè)置平行柱間的距離以及setItemLabelXXX設(shè)置顯示每個柱的數(shù)值,并可修改該數(shù)值的字體屬性等方法。
3.3在JSP中實現(xiàn)
將服務器中生成的圖表顯示在JSP頁面中需要為圖表顯示分配空間,本文采用iframe來存放圖表,iframe通過url鏈接訪問到服務器生成的圖表,在此過程中需要對Sping和Struts2進行相應的配置,以便瀏覽器能正確訪問。具體操作如下:
1)生成某統(tǒng)計圖表的的方法具體實現(xiàn)在studyNextStackedBarAction中,而studyNextStackedBarAction調(diào)用到了接口studyNext? Mapper和studyNextSumAction類,利用Spring的控制反轉(zhuǎn)機制來管理生成圖表的studyNextStackedBarAction類,Spring對studyNext? StackedBarAction類管理的配置文件applicationContext.xml中,添加如下配置: