亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        利用JFreeChart在JSP中制作圖表

        2013-01-01 00:00:00張玉葉馬春清
        計算機時代 2013年4期

        摘 要: 圖表的應(yīng)用不但可以使數(shù)據(jù)的顯示更加清晰、直觀,而且可大大增強Web頁面的功能和顯示效果。針對目前實際應(yīng)用中經(jīng)常需要通過數(shù)據(jù)庫中的數(shù)據(jù)生成相應(yīng)的圖表這一強大需求,介紹了JFreeChart中通過其提供的數(shù)據(jù)集合對象在JSP頁面中生成圖表的方法,并給出了生成餅圖和柱狀圖的具體方法和代碼。

        關(guān)鍵詞: JFreeChart; JSP; Web; 圖表

        中圖分類號:TP311.1 文獻標志碼:A 文章編號:1006-8228(2013)04-34-03

        Generating charts in JSP by using JFreeChart

        Zhang Yuye1, Ma Chunqing2

        (1. Dept. of computer, Jinan Vocational Colleage, Jinan, Shandong 250014, China; 2. Jinan Information Engineering School)

        Abstract: Using charts can not only make data be clearer, more intuitive, but also greatly enhance the Web page and display effects. Aiming at the strong request to generate corresponding charts through data in database in practical applications, a method to generate charts in JSP pages through the data set object supplied by JFreeChart is introduced. The concrete realization method and code of the pie chart and histogram are given.

        Key words: JFreeChart; JSP; Web; chart

        0 引言

        在日常統(tǒng)計報表中我們經(jīng)常需要用到各種圖表,這些圖表可以讓我們更加清晰直觀地看到數(shù)據(jù)的各種分布情況。EXCEL中提供了強大的圖表功能,利用這些功能我們可以輕松快捷地制作出所需的各種圖表?,F(xiàn)在隨著網(wǎng)絡(luò)辦公及無紙化辦公的廣泛應(yīng)用,人們也需要在網(wǎng)頁中能夠提供類似EXCEL中的圖表功能,能以圖表的形式來清晰直觀地顯示統(tǒng)計報表中的各種數(shù)據(jù)。JFreeChart是Java平臺上的一個開放的圖表繪制類庫,它完全使用Java語言編寫,可應(yīng)用于Java Applications、Applets、Servlets和JSP等。利用JFreeChart可生成餅圖、柱狀圖、折線圖、時序圖、散點圖、甘特圖等平時所需的多種圖表,并且可以產(chǎn)生PNG和JPEG格式的兩種輸出[1],利用JSP可以很方便地獲取到生成的圖片,并在網(wǎng)頁中顯示。目前一些介紹JFreeChart使用的多是通過臨時添加一些數(shù)據(jù)來演示[2-4],而實際應(yīng)用中圖表的數(shù)據(jù)通常來自于數(shù)據(jù)庫,關(guān)于如何獲取數(shù)據(jù)庫中的數(shù)據(jù)生成圖表介紹的相對較少,事實上這部分內(nèi)容才是比較實用的?;诖?,通過查閱各種參考文獻[5-7]和JFreeChart本身的開發(fā)文檔,本文以一個職工情況表為例,通過創(chuàng)建其各種職稱的分布情況的餅圖和柱狀圖,詳細介紹了在JSP中如何利用JFreeChart通過數(shù)據(jù)庫中的數(shù)據(jù)生成相應(yīng)的圖表。

        1 數(shù)據(jù)源

        統(tǒng)計報表中的數(shù)據(jù)通常來自于數(shù)據(jù)庫。本文用的示例數(shù)據(jù)庫OAJSP中有一“職工情況表”,如表1所示。

        現(xiàn)要統(tǒng)計其各種職稱的人數(shù)。職稱人數(shù)在表中并沒有直接體現(xiàn)出來,但通過一定的計算可以求出,像這種報表中數(shù)據(jù)不是直接來自于表中數(shù)據(jù),而是需要經(jīng)過計算得出的,最好是在數(shù)據(jù)庫中先建立相應(yīng)的視圖,然后再對視圖進行操作,這樣操作相對簡便。對表1根據(jù)職稱建好的視圖(在此將生成的視圖命名為“職稱統(tǒng)計報表”)如表2所示。接下來就相當于直接對“職稱統(tǒng)計報表”這個虛擬表(視圖)進行操作。

        2 開發(fā)環(huán)境

        本文示例所采用的開發(fā)工具:MyEclipse 8.6,JDK:1.6;數(shù)據(jù)庫:Oracle 10g;JFreeChart:版本1.0.6。有些高版本的JFreeChart不能很好地支持中文,為了更好地支持中文,本文采用的是1.0.6版本。服務(wù)器:利用MyEclipse自帶的Tomcat。

        開發(fā)前準備:要在JSP中使用JFreeChart,應(yīng)先根據(jù)需要下載其相應(yīng)版本的軟件,然后將其解壓到本地硬盤上。

        導(dǎo)入相應(yīng)的Jar包:將解壓后的JFreeChart1.0.6中l(wèi)ib目錄下的三個jar包:jfreechart-1.0.6.jar、gnujaxp.jar和jcommon-1.0.10.jar導(dǎo)入到當前工程的lib目錄下。

        配置web.xml:JFreeChart生成的圖片應(yīng)用于JSP時通常要利用其本身提供的Servlet文件,該Servlet文件在JFreeChart組件包中,使用時要將其配置到相應(yīng)的web.xml文件中,配置方法如下:

        DisplayChart

        org.jfree.chart.servlet.DisplayChart

        DisplayChart

        /DisplayChart

        3 圖表的建立

        在JSP中利用JFreeChart生成圖表,通常分為三個步驟。

        ⑴ 建立數(shù)據(jù)集。數(shù)據(jù)集通常來自于數(shù)據(jù)庫,需要對數(shù)據(jù)庫進行操作來獲取所需數(shù)據(jù)。JFreeChart組件對這一過程進行了封裝,通過自定義的SQL語句即可獲取到已封裝好的數(shù)據(jù)集合對象。JfreeChart中常用的JDBC數(shù)據(jù)集合對象有3種,分別為JDBCCategoryDataset(JDBC填充類別數(shù)據(jù)集合)、JDBCPieDataset(JDBC填充餅形圖數(shù)據(jù)集合)、JDBCXYDataset(JDBC填充坐標軸數(shù)據(jù)集合)。

        ⑵ 創(chuàng)建JfreeChart對象。通常通過制圖工廠JfreeChartFactory提供的相對應(yīng)的各種方法來創(chuàng)建各種圖表對象。

        ⑶ 獲取圖片。獲取生成的圖片,在JSP頁面中顯示。

        3.1 餅圖的建立

        “職工情況表”中各種職稱的統(tǒng)計人數(shù)已經(jīng)建立了相應(yīng)的視圖“職稱統(tǒng)計報表”,因此接下來就相當于直接對虛擬表“職稱統(tǒng)計報表”進行操作,也即餅圖的數(shù)據(jù)來源就是視圖“職稱統(tǒng)計報表”中的數(shù)據(jù)。

        ⑴ 建立數(shù)據(jù)集及創(chuàng)建圖表對象。在當前工程(在此設(shè)工程名為OAJSP1)的src目錄中新建一類文件PieChartUtil.java,用于與數(shù)據(jù)庫建立連接并取得職稱統(tǒng)計報表中的數(shù)據(jù),同時根據(jù)數(shù)據(jù)集中的數(shù)據(jù)生成餅圖,代碼如下:

        package db;

        import java.awt.Font;

        import java.text.NumberFormat;

        import org.jfree.chart.ChartFactory;

        import org.jfree.chart.JFreeChart;

        import org.jfree.chart.labels.StandardPieSectionLabelGenerator;

        import org.jfree.chart.plot.PiePlot;

        import org.jfree.data.general.PieDataset;

        import org.jfree.data.jdbc.JDBCPieDataset;

        public class PieChartUtil {

        public static PieDataset initPieData() {

        String driverName=\"oracle.jdbc.driver.OracleDriver\";

        //數(shù)據(jù)庫驅(qū)動

        String url=\"jdbc:oracle:thin:@localhost:1521:XE\";

        //數(shù)據(jù)庫連接URL

        String user=\"oajsp\"; //數(shù)據(jù)庫用戶名

        String password=\"111111\"; //數(shù)據(jù)庫密碼

        JDBCPieDataset dataset=1;

        try { //通過JDBC創(chuàng)建數(shù)據(jù)集合

        dataset=new JDBCPieDataset(url,driverName, user,

        password);

        String query=\"select 職稱,人數(shù) from職稱統(tǒng)計報表\";

        //SQL語句

        dataset.executeQuery(query); //查詢并向數(shù)據(jù)集合中添加

        數(shù)據(jù) dataset.close(); //關(guān)閉數(shù)據(jù)庫連接

        } catch (Exception e) {

        e.printStackTrace(); }

        return dataset; }

        public static JFreeChart createChart() { //創(chuàng)建餅圖

        JFreeChart chart=ChartFactory.createPieChart(\"職稱人數(shù)統(tǒng)

        計\",initPieData(),true,true,1);

        //參數(shù)分別表示圖表標題,數(shù)據(jù)集對象,是否顯示圖例,是否顯示提示文本,是否生成超鏈接

        chart.getTitle().setFont(new Font(\"隸書\",F(xiàn)ont.BOLD,25));

        //設(shè)置標題字體

        chart.getLegend().setItemFont(new Font(\"宋體\",F(xiàn)ont.BOLD,

        15)); //設(shè)置圖例類別字體

        PiePlot plot = (PiePlot) chart.getPlot(); //獲取繪圖區(qū)對象

        plot.setForegroundAlpha(0.5f); //設(shè)置前景透明度

        plot.setLabelFont(new Font(\"宋體\",F(xiàn)ont.PLAIN,12));

        //設(shè)置分類標簽的字體

        plot.setCircular(true); //設(shè)置餅形為正圓

        plot.setLabelGenerator(new StandardPieSectionLabelGenerator(\"{0}={2}\",

        NumberFormat.getNumberInstance(), NumberFormat

        .getPercentInstance()));

        //設(shè)置分類標簽格式為類別名稱及其所占百分比

        return chart; } }

        ⑵ 在JSP中獲取生成的圖片。在OAJSP1工程Webroot目錄中新建一JSP文件(設(shè)文件名為pie.jsp),其代碼如下:

        <%@ page language=\"java\" import=\"java.util.*\" pageEncoding

        =\"GB2312\"%>

        <%@ page import=\"org.jfree.chart.servlet.ServletUtilities,

        db.PieChartUtil\"%>

        <% String path=request.getContextPath();

        String basePath=request.getScheme()+\"://\"+request

        .getServerName()+\":\"+request.getServerPort()+path+\"/\";%>

        <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01

        Transitional//EN\">

        \">

        餅圖示例

        <% String fileName=ServletUtilities.saveChartAsJPEG

        (PieChartUtil.createChart(),500,300,session);

        String graphURL=request.getContextPath()

        +\"/DisplayChart?filename=\"+fileName; %>

        border=\"1\">

        ⑶ 啟動tomcat服務(wù)器,在瀏覽器中輸入http://localhost:8080/OAJSP1/pie.jsp,瀏覽相應(yīng)的JSP文件,運行結(jié)果如圖1所示。

        3.2 柱狀圖的建立

        柱狀圖的建立過程與餅圖的建立過程大體相同。所不同的是建立餅圖用的是JDBCPieDataset數(shù)據(jù)集合,建立柱狀圖用的是JDBCCategoryDataset數(shù)據(jù)集合,不同的數(shù)據(jù)集合放在不同的包中,要根據(jù)需要引入所需的包。還有生成的餅圖和柱狀圖所需要進行的設(shè)置稍有不同,根據(jù)需要做相應(yīng)的調(diào)整,最后在JSP頁面中要根據(jù)需要引入對應(yīng)的類。具體步驟如下。

        ⑴ 建立數(shù)據(jù)集及創(chuàng)建圖表對象。在當前工程OAJSP1的src目錄中新建一類文件BarChartUtil.java,用于與數(shù)據(jù)庫建立連接并取得職稱統(tǒng)計報表中的數(shù)據(jù),同時根據(jù)數(shù)據(jù)集中的數(shù)據(jù)生成柱狀圖,代碼如下:

        package db;

        import java.awt.Color;

        import org.jfree.chart.ChartFactory;

        import org.jfree.chart.JFreeChart;

        import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;

        import org.jfree.chart.plot.CategoryPlot;

        import org.jfree.chart.plot.PlotOrientation;

        import org.jfree.chart.renderer.category.BarRenderer;

        import org.jfree.data.category.CategoryDataset;

        import org.jfree.data.jdbc.JDBCCategoryDataset;

        public class BarChartUtil {

        public static CategoryDataset initCategoryData() {

        String driverName=\"oracle.jdbc.driver.OracleDriver\";

        //數(shù)據(jù)庫驅(qū)動

        String url=\"jdbc:oracle:thin:@localhost:1521:XE\";

        //數(shù)據(jù)庫連接URL

        String user=\"oajsp\"; //數(shù)據(jù)庫用戶名

        String password=\"111111\"; //數(shù)據(jù)庫密碼

        JDBCCategoryDataset dataset=1;

        try { //通過JDBC創(chuàng)建數(shù)據(jù)集合

        dataset=new JDBCCategoryDataset(url,driverName,

        user,password);

        String query=\"select 職稱,人數(shù) from 職稱統(tǒng)計報表\";

        //SQL語句

        dataset.executeQuery(query); //查詢并向數(shù)據(jù)集合中添加數(shù)據(jù)

        } catch (Exception e) {

        e.printStackTrace(); }

        return dataset; }

        public static JFreeChart createChart() { //創(chuàng)建柱狀圖

        JFreeChart chart=ChartFactory.createBarChart(\"職稱人數(shù)統(tǒng)

        計\",\"職稱類別\",\"人數(shù)\",initCategoryData(),PlotOrientation

        .VERTICAL,1,1,1);

        CategoryPlot plot=chart.getCategoryPlot(); //獲取圖表區(qū)對象

        plot.setBackgroundPaint(Color.white); //設(shè)置網(wǎng)格背景顏色

        plot.setRangeGridlinePaint(Color.pink); //設(shè)置網(wǎng)格橫線顏色

        BarRenderer renderer=new BarRenderer();

        renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());

        renderer.setBaseItemLabelsVisible(true);

        plot.setRenderer(renderer); //顯示每個柱的數(shù)值

        return chart; } }

        ⑵ 在JSP中獲取生成的圖片。在OAJSP1工程Webroot目錄中新建一JSP文件(設(shè)文件名為bar.jsp),其代碼如下:

        <%@ page language=\"java\" import=\"java.util.*\"

        pageEncoding=\"GB2312\"%>

        <%@ page import=\"org.jfree.chart.servlet.ServletUtilities,

        db.BarChartUtil\"%>

        <% String path=request.getContextPath();

        String basePath=request.getScheme()+\"://\"+request

        .getServerName()+\":\"+request.getServerPort()+path+\"/\"; %>

        <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0

        1 Transitional//EN\">

        \">

        柱狀圖示例

        <% String fileName=ServletUtilities.saveChartAsJPEG

        (BarChartUtil.createChart(),500,300,1,session);

        String graphURL=request.getContextPath()+

        \"/DisplayChart?filename=\"+fileName; %>

        \"

        border=\"1\">

        ⑶ 啟動tomcat服務(wù)器,在瀏覽器中輸入http://localhost:8080/OAJSP1/bar.jsp,瀏覽相應(yīng)的JSP文件,運行結(jié)果如圖2所示。

        4 結(jié)束語

        圖表的應(yīng)用不但可以使得數(shù)據(jù)的顯示更加清晰、直觀,而且能大大增強Web頁面的功能和顯示效果。JFreeChart能夠制作的圖表有很多種,但JFreeChart只提供了幾種常用的數(shù)據(jù)集合對象,對于沒有提供數(shù)據(jù)集合對象的圖表,制作時需要自己進行底層數(shù)據(jù)庫操作的封裝,其實現(xiàn)過程相對復(fù)雜一些。本文介紹的利用JFreeChart中的數(shù)據(jù)集合對象來獲取數(shù)據(jù)庫中的數(shù)據(jù)在JSP中生成圖表的方法,其實現(xiàn)簡單方便,具有通用性,應(yīng)用廣泛。

        參考文獻:

        [1] 朱賀新,穆榮,盧建軍.JFreeChart的應(yīng)用開發(fā)與改進[J].西安科技大學(xué)學(xué)報,2008.12(28):789-791

        [2] 王征強.利用JFreeChart開發(fā)包繪制圖表[J].刑臺職業(yè)技術(shù)學(xué)院學(xué)報,2007.2(24):38-41

        [3] 李村合,張培穎.基于J2EE的Java繪圖方法研究與實現(xiàn)[J].微計算機應(yīng)用,2005.26(4):49-451

        [4] 劉艷霞.JFreeChart在JSP開發(fā)中的應(yīng)用心得[J].工程地質(zhì)計算機應(yīng)用,2005.1:14-16

        [5] 李伯宇,趙麗麗.在JSP中實現(xiàn)動態(tài)圖表方法研究[J].計算機應(yīng)用,2003.23(6):213-214

        [6] 候俁,劉萬軍.JFreeChart在JavaWeb項目中的應(yīng)用[J].科學(xué)技術(shù)與工程,2008.5(8):2699-2700

        [7] 王國輝.Java Web開發(fā)實戰(zhàn)寶典[M].清華大學(xué)出版社,2010.

        亚洲精品无码永久中文字幕| 国产午夜精品美女裸身视频69| 日本高清长片一区二区| 久久一区二区三区不卡| 国产自拍精品在线视频| 成人一区二区三区激情视频| 亚洲中字幕日产av片在线| 无码国产69精品久久久孕妇| 无码片久久久天堂中文字幕| 亚洲国内精品一区二区在线| 亚洲成人激情深爱影院在线| 五月天激情电影| 亚洲人成色7777在线观看不卡| 全球中文成人在线| 久久精品成人欧美大片| 91中文人妻丝袜乱一区三区| 精品成人av人一区二区三区| 国产一区亚洲二区三区| 97久久精品无码一区二区天美 | 亚洲AV色无码乱码在线观看| 国产不卡在线免费视频| 亚洲日本人妻少妇中文字幕| 69国产成人精品午夜福中文| 最新高清无码专区| 日批视频免费在线观看| 大肥婆老熟女一区二区精品| 国产黄色三级一区二区三区四区| 丰满少妇呻吟高潮经历| 丰满人妻被中出中文字幕| 久久熟女五十路| 亚洲伊人久久大香线蕉| 欧美性猛交99久久久久99按摩| 全部孕妇毛片| 国模少妇无码一区二区三区| 一区二区在线观看精品在线观看| 国产成人精品午夜视频| 91在线在线啪永久地址| 亚洲一区二区三区麻豆| 内射中出日韩无国产剧情| 国产剧情av麻豆香蕉精品| 少妇高潮无套内谢麻豆传|