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

Tomcat 整合 JFreeChart 實現 Servlet 動態圖表輸出

     編輯:Java 程式設計入門

專案背景與準備

JFreeChart 是 Java 領域最成熟的開源圖表庫,支援柱狀圖、餅圖、時間序列圖等豐富類型。本文示範在 Tomcat 5.x 環境下,透過 Servlet 動態生成 PNG 圖表並直接輸出至瀏覽器。

環境配置步驟

  1. 安裝目錄規劃:
    • Tomcat:C:\Tomcat 5.0
    • JDK:C:\j2sdk1.4.2_09
    • Web 應用目錄:C:\Tomcat 5.0\webapps\myServlets
  2. 依賴庫部署:從 官網 下載 jfreechart-1.0.0-rc1,將以下 JAR 放入 WEB-INF/lib 及 JDK lib 目錄:
    • jfreechart-1.0.0-rc1.jar
    • jcommon-1.0.0-rc1.jar
    • gnujaxp.jar
  3. CLASSPATH 設定:將上述 JAR 加入系統或專案 CLASSPATH,確保編譯階段可解析類別。

前端頁面設計

index.html - 入口頁

<!DOCTYPE html>
<html>
<head><title>JFreeChart 動態圖表示例</title></head>
<body>
  <h2>JFreeChart: 簡單的例子</h2>
  <ul>
    <li><a href="servlet/ServletDemo1">條形統計圖</a></li>
    <li><a href="chart.html">可選圖表類型</a></li>
  </ul>
</body>
</html>

chart.html - 圖表類型選擇

<form action="servlet/ServletDemo2" method="POST">
  <input type="radio" name="chart" value="pie" checked> 圓餅圖<br>
  <input type="radio" name="chart" value="bar"> 柱狀圖<br>
  <input type="radio" name="chart" value="time"> 時間序列圖<br>
  <input type="submit" value="生成圖表">
</form>

核心 Servlet 實現

ServletDemo1.java - 固定柱狀圖

package com.jrefinery.chart.demo;

import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.chart.ChartUtilities;

public class ServletDemo1 extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // 1. 準備資料集
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(10.0, "S1", "C1");
        dataset.addValue(4.0, "S1", "C2");
        // ... 省略其它資料行 ...

        // 2. 建立圖表
        JFreeChart chart = ChartFactory.createBarChart(
                "Bar Chart", "Category", "Value", dataset,
                PlotOrientation.VERTICAL, true, true, false);

        // 3. 輸出 PNG
        resp.setContentType("image/png");
        try (OutputStream out = resp.getOutputStream()) {
            ChartUtilities.writeChartAsPNG(out, chart, 400, 300);
        }
    }
}

關鍵技術點解析

  • 資料模型:DefaultCategoryDataset 以 (系列, 類別) 二維結構組織數據,適合柱狀/線圖。
  • 圖表工廠:ChartFactory 提供靜態方法快速建立常見圖表,內部封裝 JFreeChart、Plot、Renderer 組裝邏輯。
  • 輸出流處理:務必使用 try-with-resources 關閉 OutputStream,避免連線洩漏;設定 Content-Type: image/png 讓瀏覽器正確渲染。

部署與驗證

  1. 編譯 Servlet 類別至 WEB-INF/classes。
  2. 在 WEB-INF/web.xml 註冊 Servlet 映射(省略,遵循標準 Servlet 2.3 規範)。
  3. 重啟 Tomcat,訪問 https://localhost:8080/myServlets/ 測試。

進階擴展建議

  • 引入 ChartUtilities.encodePNG() 實現 Base64 編碼,支援 <img src="data:image/png;base64,..."> 內嵌圖表。
  • 整合 JFreeChart 的 ChartChangeListener 實現伺服器端圖表快取,降低高併發下的 CPU 開銷。
  • 升級至 JFreeChart 1.5.x + Jakarta EE 9,適配現代化部署環境。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved