各位好:
我最近用到Jfreecharts开源项目来生成饼状图形,但把项目发布到TOMCAT中时,图形不能显示,只是显示一个长方形,右上角有个红X。下面是源码,最后几行打印出了图形路径,实际打印出来的路径为:
/duanzhh/servlet/DisplayChart?filename=jfreechart-43242.png 
而且该图在TOMCAT的/tmp目录下却是生成了jfreechart-43242.png 图形,感觉上面打印出来的路径有问题,但不知道具体原因。麻烦给为大侠帮忙给看下具体原因,感激不尽
package comm;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import java.text.NumberFormat;import javax.servlet.http.HttpSession;import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.StandardPieItemLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.PieDataset;import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import org.jfree.data.time.Day;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.chart.plot.*;
/**
 * Servlet implementation class for Servlet: PipeServlet
 *
 */
 public class PipeServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
   static final long serialVersionUID = 1L;
   
    /* (non-Java-doc)
 * @see javax.servlet.http.HttpServlet#HttpServlet()
 */
public PipeServlet() {
super();
}   

/* (non-Java-doc)
 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}  

/* (non-Java-doc)
 * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
HttpSession   session   =   request.getSession(); 
PrintWriter out = response.getWriter();
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("高中以下",370);
data.setValue("高中",1530);
data.setValue("大专",5700);
data.setValue("本科",8280);
data.setValue("硕士",4420);
data.setValue("博士",80); PiePlot3D plot = new PiePlot3D(data);//3D饼图 JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true);
chart.setBackgroundPaint(java.awt.Color.white);//可选,设置图片背景色
chart.setTitle("程序员学历情况调查表");//可选,设置图片标题
plot.setToolTipGenerator(new StandardPieItemLabelGenerator());
StandardEntityCollection sec = new StandardEntityCollection();
ChartRenderingInfo info = new ChartRenderingInfo(sec);
PrintWriter w = new PrintWriter(out);//输出MAP信息
//500是图片长度,300是图片高度
String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);
ChartUtilities.writeImageMap(w, "map0", info, false);

String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
// String graphURL = "F:\\work\\apache-tomcat-5.5.23\\temp";
// F:\work\apache-tomcat-5.5.23\temp
out.println("<P>");
// out.println("<IMG SRC= graphURL  BORDER=1 WIDTH=800 HEIGHT=600/>");
out.println("<IMG SRC= graphURL  BORDER=1 WIDTH=800 HEIGHT=600/>");
out.println("JFREECHART");
out.println(graphURL);
}           
}

解决方案 »

  1.   

    图片既然产生了那就你检查一下页面上的路径是否正确罗。。
    还有画图不提倡用JFreechart chartDirect
      

  2.   

    因为对这方面不太熟悉,如何进行检查路径是否正确,上面有我打印出来的图片路径以及TOMCAT中临时生成的图片路径,麻烦给解释一下呗!
      

  3.   

    应该是你没有关吧,out.clear();
      out = pageContext.pushBody();
      

  4.   

    out.println("<IMG SRC= graphURL BORDER=1 WIDTH=800 HEIGHT=600/>");
    改成 out.println("<IMG SRC= “+graphURL+” BORDER=1 WIDTH=800 HEIGHT=600/>");
      

  5.   

    你原来只是输出了graphURL这个字符串不是graphURL这个变量的值。
      

  6.   

    String fileName = ServletUtilities.saveChartAsPNG(chart,800,600,session);String url = request.getContextPath() + "/DisplayChart?filename=" + fileName;<img src="<%= url %>" width="800" height="600">
    这是我在页面是模拟的  (已经成功了)希望对你有所启示