在servlet中动态生成JFreeChart

我正在尝试使用JFreeChart动态生成图形,因为用户选择了一些复选框,但我无法弄清楚如何最好地将生成的数据集转换为图表forms(我的代码可以从这些图表中生成图表,但需要生成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 results = new ArrayList(); 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方法从用户post生成数据集,然后可以将它们存储在字段中,随后RequestDispatcher将用户转发到JSP,然后在img标记中调用servlet的doGet方法,该标记使用之前存储的数据集。用于生成png的字段,然后由JSP中的HTML显示。

让您的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重新加载图像。

我建议你使用ServletUtilities类。 它保存在java tempdir中并在会话失效时清理。 :)然后显示文件的另一个提示是使用DisplayChart servlet来获取图像。 这是在web.xml中

   DisplayChart org.jfree.chart.servlet.DisplayChart   DisplayChart /servlet/DisplayChart  

这是使用jstl显示图像的方式: