Динамически генерировать JFreeChart в сервлете - PullRequest
5 голосов
/ 10 августа 2009

Я пытаюсь динамически генерировать графики с использованием JFreeChart в результате установки некоторых флажков, которые выбирает пользователь, но я не могу понять, как лучше всего получить сгенерированные наборы данных в виде диаграммы (у меня есть код, который делает диаграммы из них,но нужно произвести pngs) и в представление JSP.В настоящее время я могу думать только об отправке наборов данных в JSP, но не могу думать о том, что оттуда делать ... Как сделать так, чтобы: пользователь отправлял форму сервлету, сервлет генерировал наборы данных, диаграммы создавались из наборов данных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, который затем вызывает метод doGet сервлета в теге img, который использует наборы данных, ранее сохраненные в полях, для создания png, который затем отображается HTML в JSP.

Ответы [ 2 ]

5 голосов
/ 30 ноября 2009

Я бы предложил вам использовать класс ServletUtilities . Сохраняется в Java Tempdir и очищается, когда сеанс признан недействительным. :) Еще один совет для отображения файла - использовать сервлет DisplayChart для получения изображений. Это идет в 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=""/>
4 голосов
/ 10 августа 2009

Ваш файл JSP должен содержать тег, в котором атрибут src - это имя вашего сервлета. Затем сервлет возвращает диаграмму PNG:

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

Страницы JSP на самом деле предназначены только для вывода HTML или других текстовых данных. Хотя вы могли бы заставить JSP вывести PNG, это не выгодно.

Звучит так, как будто вы хотите создать динамическую страницу, которая обновляется на основе изменения состояния раскрывающегося меню. Для этого вам нужно использовать Javascript, который срабатывает при изменении меню и обновляет значение атрибута src тега img. Затем браузер перезагрузит изображение из вашего сервлета с новым графиком.

...