Java要害字導航 網絡 J2ME 手機游戲 JavaCard Struts 游戲 分析器 JAAS EJB JavaMail 設計模式 J2EE
數據的圖解表示法是一個熱門的話題。 我們翻閱雜志,可以看到很多公司提供復雜的圖形程序包,可以讓你處理你的數據並使之可視化。
這些程序包有一個公共的問題:它們要求在它們可以把你的數據形成圖表之前,你必須把你的XML數據格式化成一種它們能夠讀懂的特定的格式。 這樣的話,XML有力的靈活性就被埋沒了,因為你必須改換數據格式--通常使用XSLT。 這並不總是想看上去那麼微不足道的,因為有時開發者必須從第三方的數據源獲得XML文件,然後在把這些XML文件發送到客戶之前給它們添加圖表。 舉例來說吧,一個金融服務公司可能必須從一個租用的數據庫中取得一家公司的基本資料,然後在把它轉化成XSL格式之前需要分析這些數據。
本文將介紹如何一步一步的使用Java開發一個業務圖表服務器。 服務器調用你的數據源,然後按照你設置來生成數據序列和種類的XPath變量分析數據。 它然後把數據載入制圖表引擎,一個名為JFreeChart的出色的源碼開放程序包。
最後返回到服務器的調用者的圖表是一個JPEG文件,這樣它就可以被發送到一個基於浏覽器的產品而不需要下載額外的軟件了。
在這邊文章中我開發的服務器(起名為chartserver),是一個初級版本,調用固定的XML文件作為數據源。 在本文的結尾,我將討論如何把這個服務器擴展成可以調用自己設置的參數需要的數據服務器。 另外,這個例程使用開放源碼的JFreechart引擎在服務器端構造它的圖表。 而且想要把它修改成使用任何其它的制圖表引擎的話,也是一件很簡單的事情。
圖表的元素
大部分的圖表可以分解成一系列公共的對象,其中最主要的兩個是數據系列和數據種類。 數據系列正像它名稱所蘊含的意義---一系列計劃放在一起組成一種關系的數據。
舉例來說,在一個線狀圖表中數據系列是線內的點;在一個圓餅圖中,數據系列是組成餅圖的每個表示數量的"塊"。 另一方面數據種類是描述數據系列的點。 舉例來說,在一個線狀圖中,假如數據系列是股票收盤價格,那麼通常的匹配這些數據的日期類別將是股票在這個價位收盤的日期。
本文中的例子是基於一個包含一個虛擬的球隊的賽季賽況統計數據的XML文件。在下面的例子中,球員的得分情況被制成了一張圓餅圖。 得分組成數據系列,球員姓名組成類別系列。
某些圖表需要多種數據系列,比如你想比較兩組數據的圖表,最現實的例子就是預算收入和。 實際收入,或者進行的比賽項目和取得的成績, 它然後使用這些值作為參數來構造圖表對象。
這些值連同其它的用於每個圖表的配置信息一起保存在一個charts.xml文件中。
<chart id="points">
<url>http://localhost/players.xml</url>
<config>http://localhost/pmconfig.xml</config>
<series>//Players/Player[Points>0 and Minutes>1000]/Points</series>
<categories>//Players/Player[Points>0 and Minutes>1000]/Name</categories>
<XSize>600</XSize>
<YSize>400</YSize>
</chart>
這段XML文本告訴服務器用於生成圖表的數據源儲存在什麼位置,生成圖表的配置信息儲存在什麼位置以及用於數據系列和數據種類的XPath是什麼。 我們可以看出,XPath值可以相當的復雜,在這個例子中,我們用一些條件過濾這個XML文件,找到那些球員有得分,那些球員上場時間超過1000分鐘。 他們的分數組成數據系列,他們的姓名組成類別系列。
現在,用於單獨圖表的配置文件包含設定圖表類型,圖表標題,種類標題,值標題和每個系列的標題。 這樣就能夠輕而易舉的使用數據系列被定義的顏色來表示這個系列,而不是使用某種代碼來表示了。
<chart>
<Type>1</Type>
<Title>Points By Player</Title>
<CatTitle>Player Name</CatTitle>
<ValTitle>Points</ValTitle>
<SeriesTitles>Points Scored</SeriesTitles>
</chart>
Servlet是如何工作的
代碼段1中的doGet函數取得參數值(包括圖表、寬度和高度),載入配置XML文件,分析這個文件取得正確的數據文件,然後設置所有的DoChart(見代碼段2)函數所需要的變量,而DoChart函數是執行實際的制表功能的。
配置圖表對象
配置圖表對象是一個兩步操作。 第一步是設置圖表的外觀屬性。 第二步是將這些數據裝載入圖表。
這些都是由DoChart函數來完成的。 它分析配置文件並取得一個圖表類型,然後以此構造出11個圖表中的一個。
在下面的例子中,球員的得分情況被制成了一張圓餅圖。 得分組成數據系列,球員姓名組成類別系列。