运行的是教材上提供的最简单的demo程序,但运行后图片显示不出来,为什么?
可能出问题的几条语句:
...
String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);
//filename代表生成的图表文件的名字,据说是临时文件,在硬盘上搜索了一下,没有发现相关文件
String url = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
//url代表的是改图表文件的URL,但是对于"/servlet/DisplayChart?filename=" 这一部分现在还是不太理解?
%>
" width=500 height=300 border=0 usemap="#">
//显示图表
为什么这样说呢?
这是在后来运行另一个例子的时候得到的反证。
另一个程序:
pageEncoding="gb2312"%>
out.clearBuffer();
response.setContentType("image/jpeg");
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(610, "广州", "猪肉");
dataset.addValue(540, "广州", "牛肉");
dataset.addValue(320, "广州", "羊肉");
dataset.addValue(370, "广州", "鸡肉");
dataset.addValue(130, "广州", "鱼肉");
JFreeChart chart = ChartFactory.createBarChart3D("BiangJi", "销量", "肉类", dataset, PlotOrientation.VERTICAL, false, false,
false);
java.io.OutputStream os = response.getOutputStream();
javax.imageio.ImageIO.write(chart.createBufferedImage(500, 300), "JPEG", os);
os.flush();
os.close();
%>
在这个例子里面没有用到web.xml,但是它用流输出了图表
我知道/servlet/DisplayChart是在web.xml文件中做了映射的,而且必须如下做:
DisplayChart
org.jfree.chart.servlet.DisplayChart
DisplayChart
/servlet/DisplayChart
我最开始没做这个映射所有不能显示,不过后来在做了这个映射以后还是不行,因为搞不懂上面"/servlet/DisplayChart?filename=" 的用法,所以对这个映射是否需要很是不解?答案是肯定需要这个映射的。
为什么所有语句都对了,还是不行了,怀着对映射的不惑看了一个以前的例子“Hello World”,奇怪的是这个例子也不能执行了,程序肯定是没错了,以前执行过,问题出在哪里?Eclipse?
太意外了,重启Tomcat就ok了!看来重启Tomcat就像重启电脑一样,很多意外都可以排除。
最后的疑问:"/servlet/DisplayChart?filename=" 这一部分现在还是不太理解?这算是什么?
request.getContextPath() + "/servlet/DisplayChart?filename=" + filename
request.getContextPath() //这是本应用程序的路径(/jfreechardemo1), filename//这是图表文件名(jfreechart-onetime-37063.jpeg),中间缺图表文件在应用中的路径,"/servlet/DisplayChart?filename="中的 /servlet/DisplayChart是要映射到DisplayChart类的,该类有什么作用?