xkang

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  0 随笔 :: 3 文章 :: 0 评论 :: 0 Trackbacks
运行的是教材上提供的最简单的demo程序,但运行后图片显示不出来,为什么?
可能出问题的几条语句:
<%
...
String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session); 
//filename代表生成的图表文件的名字,据说是临时文件,在硬盘上搜索了一下,没有发现相关文件
String url = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
//url代表的是改图表文件的URL,但是对于"/servlet/DisplayChart?filename=" 这一部分现在还是不太理解?
%>
<img src="<%= url %>" width=500 height=300 border=0 usemap="#<%= filename %>"> 
//显示图表
为什么这样说呢?
这是在后来运行另一个例子的时候得到的反证。
另一个程序:

<%@ page language="java" contentType="text/html; charset=gb2312"
    pageEncoding="gb2312"%>

<%@ page import="org.jfree.data.category.*"%>
<%@ page import="org.jfree.chart.*"%>
<%@ page import="org.jfree.chart.plot.*"%>
<%

  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文件中做了映射的,而且必须如下做:
<servlet>
    <servlet-name>DisplayChart</servlet-name>
    <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
    </servlet>
<servlet-mapping>
    <servlet-name>DisplayChart</servlet-name>
    <url-pattern>/servlet/DisplayChart</url-pattern>
</servlet-mapping>

我最开始没做这个映射所有不能显示,不过后来在做了这个映射以后还是不行,因为搞不懂上面"/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类的,该类有什么作用?
posted on 2008-07-10 21:28 阅读(550) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: