我在struts2.in中创建了一个Web项目,其中我使用了在我的Action类中实现的jfreechart绘制了一个图形。
http://www.java2s.com/Code/Java/Chart/JFreeChartTimeSeriesDemo10withperminutedata.htm
它在单独的applet窗口中显示了图形,我用谷歌搜索并找到了一种将图表保存为图像的方法,以便在我的jsp文件中可以包含此图像。但是最后,当我部署时,我不得不将我的项目转换成WAR文件,但是如果我将项目转换成WAR,我将无法访问根据用户请求而更改的图像(图)。因此,我想到了保存图表/图像在缓冲区或其他内容中,以便稍后显示该内容,然后请求新图形或用户注销时将其删除。
因此,您可以请ppl给出一些有关如何完成此操作的想法。提前致谢
我写的东西和你想做的差不多。我完成此操作的方法是拥有第二个Servlet(非常简单),该Servlet根据请求的图表获取参数,并将该图表生成为PNG。基本上,您使用必需的参数调用servlet。您采用这些参数并构建图表。返回图表的重要部分发生在ChartUtilities.writeChartAsPNG(out, chart, 640, 480)第一个参数是响应调用页面的输出流的地方。第二个参数是您构建的图表。最后两个参数用于图像的大小。当您调用此servlet时,它将位于
PNG
ChartUtilities.writeChartAsPNG(out, chart, 640, 480)
<img src="URL_to_Servlet" />
URL包含构建图表所需的参数。
以下是您将需要的代码,仅着重于将图表作为动态生成的图像从传回Servlet。
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."); } }