私はあなたがやろうとしていることに似た何かを書きました。これを実現する方法は、要求されたチャートに基づいてパラメーターを受け取り、チャートをとして生成する2番目のサーブレット(非常に単純)を用意することでしたPNG
。基本的に、必要なパラメータを使用してサーブレットを呼び出します。これらのパラメータを使用して、グラフを作成します。チャートを返す重要な部分はChartUtilities.writeChartAsPNG(out, chart, 640, 480)
、最初のパラメーターが呼び出し元ページへの応答の出力ストリームである場合に発生します。2番目のパラメーターは、作成したチャートです。最後の2つのパラメーターは、画像のサイズに使用されます。このサーブレットを呼び出すと、内部になります
<img src="URL_to_Servlet" />
チャートを作成するために必要なパラメータを含むURLを使用します。
以下は、から動的に構築された画像としてチャートを返すことにのみ焦点を当てた、必要なコードですServlet
。
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
public class ChartServlet extends HttpServlet {
/*
* (non-Javadoc) @see
* javax.servlet.http.HttpServlet#doGet(
* javax.servlet.http.HttpServletRequest,
* javax.servlet.http.HttpServletResponse)
*/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
JFreeChart chart = this.generateLineChart();
ServletOutputStream out = resp.getOutputStream();
resp.setContentType("image/png");
ChartUtilities.writeChartAsPNG(out, chart, 640, 480);
out.close();
}
/**
* Generate chart.
*
* @return the j free chart
* @throws IOException Signals that an I/O exception has occurred.
*/
private JFreeChart generateLineChart() throws IOException {
return chart;
}
/*
* (non-Javadoc) @see javax.servlet.GenericServlet#init()
*/
@Override
public void init() throws ServletException {
// TODO Auto-generated method stub
System.out.println("Starting up charts servlet.");
}
}