[英]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.