我在struts2.in中创建了一个web项目,我已经使用jfreechart绘制了一个图形,我在Action类中实现了它。
http://www.java2s.com/Code/Java/Chart/JFreeChartTimeSeriesDemo10withperminutedata.htm
它在单独的applet窗口中显示图形我用Google搜索并找到一种方法将此图表保存为图像,以便在我的jsp文件中我可以包含此图像。 但是当我部署时,我必须将我的项目转换为WAR文件,但如果我将项目转换为WAR,则无法访问根据用户请求更改的图像(图形)。所以我想保存图表/图像在缓冲区或某些东西中,以便在请求新图形或用户注销后立即删除它。
那么你可以提供一些关于如何实现这一点的想法。 在此先感谢
答案 0 :(得分:2)
我写了类似于你想要做的事情。我完成这个的方法是有一个第二个servlet(非常简单),它根据请求的图表接收参数,并生成图表PNG
。基本上,您使用所需的参数调用servlet。您可以获取这些参数并构建图表。返回图表的重要部分发生在ChartUtilities.writeChartAsPNG(out, chart, 640, 480)
,其中第一个参数是对调用页面的响应的输出流。第二个参数是您构建的图表。最后两个参数用于图像的大小。当你调用这个servlet时,它将在
<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.");
}
}