小编典典

在servlet中动态生成JFreeChart

jsp

由于用户选择了某些复选框,我试图使用JFreeChart动态生成图形,但是我无法弄清楚如何最好地将生成的数据集转换为图表形式(我有一些代码可以根据这些图表制作图表,但是需要产生png)并进入JSP视图。当前,我只能考虑将数据集发送到JSP,但不能考虑从那里做些什么……我如何做到:用户向Servlet提交表单,Servlet生成数据集,从数据集生成图表,图表中的png,最后将png调度到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,该JSP然后在img标签中调用servlet的doGet方法,该标签使用之前存储在数据库中的数据集。字段以生成png,然后由JSP中的HTML显示。


阅读 322

收藏
2020-06-08

共1个答案

小编典典

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

2020-06-08