首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

使用 JFreeChart 在 Web 應用中生成統計圖表完整指南

     編輯:Java 相關知識

前言

在企業級 Web 開發中,數據可視化是常見需求。雖然可以手繪圖形(如 Flash、SVG),但代碼量大且易出錯。商業圖表庫(如 JClass)又需付費。對於崇尚開源的開發者,JFreeChart 是最佳選擇:它支援柱狀圖、餅圖、雷達圖、K 線圖等多種圖表類型,適用於 C/S、B/S 甚至即時環境,且完全開源免費。本文將以餅圖為例,詳細演示如何在 JSP/Servlet 環境中整合 JFreeChart。

環境準備

  1. 前往 JFreeChart 官網 下載最新版本。
  2. 將 jfreechart.jar 和 jcommon.jar 放入專案的 Classpath 中(如 WEB-INF/lib)。

核心 JavaBean:圖表生成邏輯

建立 GSPieChart.java 封裝圖表生成與輸出邏輯:

package gov.gwssi.tax.nspg.datadisposal;

import java.awt.*;
import java.io.PrintWriter;
import javax.servlet.http.HttpSession;
import org.jfree.chart.*;
import org.jfree.chart.plot.Pie3DPlot;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.util.ChartRenderingInfo;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.chart.urls.StandardPieURLGenerator;
import org.jfree.chart.tooltips.StandardPieToolTipGenerator;

public class GSPieChart {

    public static String generatePieChart(Long[] datas, String targetUrl,
                                          HttpSession session, PrintWriter pw, int w, int h) {
        String filename = null;
        try {
            // 1. 準備數據集
            DefaultPieDataset dataset = new DefaultPieDataset();
            dataset.setValue("正常納稅人", datas[0]);
            dataset.setValue("異常納稅人", datas[1]);
            dataset.setValue("數據不全納稅人", datas[2]);
            dataset.setValue("未處理納稅人", datas[3]);

            // 2. 配置 3D 餅圖屬性
            Pie3DPlot plot = new Pie3DPlot(dataset);
            plot.setInsets(new Insets(0, 5, 5, 5));
            plot.setForegroundAlpha(0.6f);
            plot.setLabelGenerator(null); // 不顯示標籤
            plot.setURLGenerator(new StandardPieURLGenerator(targetUrl, "type")); // 圖片映射 URL
            plot.setToolTipGenerator(new StandardPieToolTipGenerator()); // 提示訊息

            // 3. 建立圖表物件並美化
            JFreeChart chart = new JFreeChart("數據處理結果統計圖",
                    JFreeChart.DEFAULT_TITLE_FONT, plot, true);
            chart.setTitle(new TextTitle("數據處理結果統計圖",
                    new Font("黑體", Font.BOLD, 15)));
            chart.getLegend().setItemFont(new Font("黑體", Font.PLAIN, 12));
            chart.setBackgroundPaint(new Color(254, 254, 141));

            // 4. 輸出為暫存 PNG 並生成 ImageMap
            ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
            filename = ServletUtilities.saveChartAsPNG(chart, w, h, info, session);
            ChartUtilities.writeImageMap(pw, filename, info);
            pw.flush();
        } catch (Exception e) {
            e.printStackTrace();
            filename = "public_error_500x300.png";
        }
        return filename;
    }
}

JSP 頁面調用

在 JSP 中實例化 JavaBean 並輸出圖片:

<%
    String targetUrl = "../servlet/GSMainControlServlet?id=" + sid;
    Long[] datas = {normals, new Long(totalAbnormal), dataLacks, notProcesses};
    String filename = GSPieChart.generatePieChart(datas, targetUrl, session,
                            new PrintWriter(out), 580, 250);
    String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
%>

<!-- 圖片輸出區塊 -->
<table width="580" border="0" cellspacing="0" cellpadding="0">
    <tr>
        <td>
            <img src="<%= graphURL %>" width="580" height="250" border="0"
                 usemap="#<%= filename %>">
        </td>
    </tr>
</table>

Web.xml 配置圖表 Servlet

JFreeChart 內建 DisplayChart Servlet 負責從 Session 讀取暫存圖片並輸出:

<servlet>
    <servlet-name>DisplayChart</servlet-name>
    <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>DisplayChart</servlet-name>
    <url-pattern>/servlet/DisplayChart</url-pattern>
</servlet-mapping>

關鍵點總結

  • 暫存機制:圖片存於伺服器暫存目錄,需定期呼叫 session.removeAttribute("JFreeChart_Deleter") 清理。
  • 圖片映射:usemap 配合 ChartUtilities.writeImageMap 實現扇形區域點擊跳轉。
  • 擴展性:只需更換 Plot 實現類(如 CategoryPlot)即可支援柱狀圖、折線圖等。

完整範例亦可參考 JFreeChart 發布包中的 jfreechart-sample.war。掌握此流程,即可在任何 Java Web 專案中快速引入專業級圖表功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved