有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在servlet中动态生成JFreeChart

由于用户选择了一些复选框,我尝试使用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方法从用户post生成数据集,然后可以将它们存储在字段中,随后RequestDispatcher将用户转发给JSP,JSP随后在img标记中调用servlet的doGet方法,它使用先前存储在字段中的数据集生成png,然后由JSP中的HTML显示


共 (2) 个答案

  1. # 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重新加载图像

  2. # 2 楼答案

    我建议您使用ServletUtilities类。它保存在java tempdir中,并在会话无效时进行清理。:)然后显示文件的另一个提示是使用DisplayChart servlet获取图像。 这在网络上进行。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=""/>