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

JFreeChart 實戰:封裝自定義 JSP 標簽實現動態圖表

     編輯:Java 程式設計入門

需求背景

在 JSP 頁面中直接嵌入圖表生成邏輯會導致代碼混亂、難以復用。最佳實踐是將 JFreeChart 封裝為自定義標簽庫,頁面僅需聲明式調用:

<mytag:chart width="790" height="460" type="bar" data="${requestScope.dataVO}" chartType="3D" />

核心實現:NtasChartTag 詳解

繼承 TagSupport,重寫 doStartTag(),流程如下:

  1. 從 Request 獲取數據對象 DataVO
  2. 實例化圖表工廠 NTASChartFactory,注入尺寸、風格(2D/3D)
  3. 調用 createNTASChart(type) 生成圖片文件
  4. 輸出 <img> 標簽及關聯的 <map> 熱區
public class NtasChartTag extends TagSupport {
    private static final long serialVersionUID = 1L;
    private int width = 790;
    private int height = 460;
    private String type;
    private DataVO datavo;
    private String attrbuteName = NtasConst.REQUEST_DATAVO_KEY;
    private String chartType = "2D";

    @Override
    public int doStartTag() throws JspException {
        StringBuffer sb = new StringBuffer();
        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
        HttpSession session = request.getSession(true);
        datavo = (DataVO) request.getAttribute(attrbuteName);

        NTASChartFactory factory = new NTASChartFactory(datavo, session);
        factory.setPicWidth(width);
        factory.setPicHeight(height);
        factory.setChartstyle(chartType);

        try {
            factory.createNTASChart(type);
        } catch (Exception e) {
            e.printStackTrace();
        }

        String picFileName = factory.getFileName();
        String picURL = factory.getPicURL();
        sb.append(factory.getChartMapHtml()); // 圖片熱區
        sb.append(String.format(
            "<img border='0' width='%d' height='%d' src='%s%s' useMap='#%s' />",
            width, height, request.getContextPath(), picURL, picFileName
        ));

        try {
            pageContext.getOut().println(sb.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return EVAL_PAGE;
    }
    // getter/setter 省略...
}

關鍵設計點

  • 會話級緩存:工廠類內部管理圖片文件生存周期,避免併發衝突。
  • 熱區支持:getChartMapHtml() 返回 <map>,實現圖表區域點擊交互。
  • 靈活配置:寬高、類型、數據源、渲染模式全通過屬性注入,零硬編碼。
  • 異常安全:捕獲生成異常並打印棧跡,不中斷頁面渲染。

部署步驟

  1. 編譯打包為 JAR,放入 WEB-INF/lib
  2. 編寫 .tld 文件定義標簽屬性,放入 WEB-INF
  3. JSP 頁面引入:<%@ taglib uri="/WEB-INF/mytags.tld" prefix="mytag" %>
  4. 頁面調用標簽,Controller 準備 DataVO 放入 Request

此模式可輕鬆擴展支持折線圖、餅圖、散點圖等多種圖表類型,構建企業級報表門戶的基石。

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