簡體   English   中英

在servlet中動態生成JFreeChart

[英]Dynamically generate JFreeChart in servlet

我正在嘗試使用JFreeChart動態生成圖形作為用戶選擇的一些復選框的結果,但我無法弄清楚如何最好地將生成的數據集轉換為圖表形式(我有代碼從這些生成圖表,但需要生成pngs)並進入JSP視圖。 目前,我只能考慮將數據集發送到JSP,但不能想到從那里做什么...我如何做到這一點:用戶將表單提交給servlet,servlet生成數據集,從數據集生成的圖表,pngs從圖表和最后的pngs派遣到jsp? 或類似的規定。

public void doPost(HttpServletRequest request,
                   HttpServletResponse response)
                    throws IOException, ServletException{

    String[] metrics     = request.getParameterValues("metrics");
    String[] fileNames   = request.getParameterValues("files");

    List<CategoryDataset> results = new ArrayList<CategoryDataset>();
    DMCalc calculator = new DMCalc(metrics, fileNames);  
    calculator.calculateResults();
    results.add(calculator.getEditDistanceDataset());
    results.add(calculator.getSimilarityDataset());
    results.add(calculator.getTimeChartDataset());

    request.setAttribute("results", results);
    RequestDispatcher view = request.getRequestDispatcher("metricResult.jsp");

    view.forward(request, response);
}

更新:

通過讓doPost方法從用戶帖子生成數據集,然后可以將它們存儲在字段中,隨后RequestDispatcher將用戶轉發到JSP,然后在img標記中調用servlet的doGet方法,該標記使用之前存儲的數據集。用於生成png的字段,然后由JSP中的HTML顯示。

我建議你使用ServletUtilities類。 它保存在java tempdir中,並在會話失效時進行清理。 :)然后顯示文件的另一個提示是使用DisplayChart servlet來獲取圖像。 這是在web.xml中

      <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>

這是使用jstl顯示圖像的方式:

<img src="<c:url value='/servlet/DisplayChart?'><c:param name='filename' value='${yourFileNameHERE}' /></c:url>" alt=""/>

讓您的JSP文件包含一個標記,其中src屬性是您的servlet的名稱。 然后,您只需讓servlet返回PNG圖表:

    OutputStream out = response.getOutputStream();
    response.setContentType("image/png");
    ChartUtilities.writeChartAsPNG(out, chart, width, height);

JSP頁面實際上只用於輸出HTML或其他文本數據。 雖然您可以強制JSP輸出PNG,但這樣做沒有任何好處。

聽起來您想要創建一個基於下拉菜單狀態更改進行更新的動態頁面。 為此,您需要使用在菜單更改時觸發的Javascript,並更新img標記的src屬性的值。 然后瀏覽器將使用新圖表從servlet重新加載圖像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM