李顺利
随笔-50  评论-170  文章-0  trackbacks-0

JFreeChart在JSP(tomcat)中的一些问题(图片不显示)

环境:Myeclipse tomcat JFreechart

最近在学习jfreechart的时候,跟着许多网上的实例,一点一点做,后面发现了一个大家应该都差不多经历的错误,那就是用jfreechart已经生成的图片(图片已经在tomcat的临时目录下\Tomcat 6.0\temp),不过在浏览器下浏览的时候竟然显示不了(显示一个红叉clip_image002)。碰到问题后,就上网搜了好多,发现也是有很多人遇到同样的问题,解决的方案都说的不够详细,现谈一下我的解决方法的,希望给需要帮忙快速解决。

1. 代码要准确

第一步的时候我想到的是是不是我的代码写错了,我仔细查看,应该没有错误(代码是从一个工程包里面拷过来的),一些jar包也已经导入,运行也是正常的嘛(毕竟图片已经生成),我就怀疑是不是配置的问题

实际上期间也试过改一定的代码,改了url

String url = "C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\temp\\" + fileName;这是图片的放到物理位置,能够成功,不过没有很好的移植性和兼容性。推荐大家不要使用。

2. 配置要准确

后来我就查看了一下jfreechart的帮助文档,发现了一个很重要的信息:

public class DisplayChart
extends javax.servlet.http.HttpServlet

Servlet used for streaming charts to the client browser from the temporary directory. You need to add this servlet and mapping to your deployment descriptor (web.xml) in order to get it to work. The syntax is as follows:

<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的话,就必须需要配置web.xml,就是把他们上面的语句加进去,好,我也加进去了,不过结果依旧,这个时候我是很痛苦的。。。

3. 修改注释

没办法,继续在网络里搜索人家的解决办法,后面也看到一个解决方案

因为使用的是TOMCAT,要修改/tomcat/conf/web.xml
把下面这段修改:
<!--
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
-->修改为:
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>

也就是把注释去掉,让他有作用,后来上网搜了一下关于这个invoker的作用,大概是这个作用:申明一个名字为invoker的Servlet,所有地址为“/servlet/*”(通配符,表示所有)的请求都将被invoker捕获,由它去执行。

后面就更郁闷了,竟然发现重启tomcat服务器竟然报错误了,后来就放弃了这个方案。继续寻找新的解决思路。

4. 位置要准确

后来真的没有办法了,就想把其中的jfreechart处理jsp抽离出来,搞个单独的工程(以前的是一个大的工程),新建工程,就是因为新建了一个web工程,所有的问题都解决了。问题解决的不是我真的在这个工程下使用jfreechart,而是我发现了一个我认为不可能错误的地方,就是我把web.xml的位置放错了,我一直很纳闷,我以前只有一个web.xml的,为什么在做这个的时候竟然出现了另一个???难道是我的误操作???

clip_image004

真的很纳闷,我的配置信息都放在了下面的web.xml里,不过正确的位置应该是上面的位置,删除下面的web.xml,并在上面配置web.xml,问题解决。

浏览器结果

clip_image006

5. 浏览器兼容的原因(不支持jpeg)

因为在寻找解决方案的时候,查找了一些实例,就顺便来个学习吧,就从下面的网站找了一个实例(http://www.blogjava.net/Alpha/archive/2007/01/13/93569.html),创建jsp,启动tomcat,并打开浏览器浏览,发现问题有出来,我百思不得其解啊。后来我比较了一下两个jsp(一个成功一个失败),发现里面有一个不同点,

String fileName = ServletUtilities.saveChartAsPNG(chart,800,600,null,session);

String filename = ServletUtilities.saveChartAsJPEG(chart,500,300,info,session);

仔细比较一下,发现就是图片的格式问题,难道JPEG网页不能支持,尝试了一下,把JPEG改为PNG的,后来运行,成功。(在IE,遨游,Chrome浏览器上运行都好像不支持JPEG)。

至此,问题都已经解决,希望这篇博文能带给大家一些解决思路。

附成功的jsp源代码(其中的一些jar就请大家自己到网站上下载了)

<%@ page language="java" contentType="text/html; charset=GB18030"

pageEncoding="GB18030"%>

<%@ page import="org.jfree.data.general.DefaultPieDataset,org.jfree.chart.ChartFactory

,org.jfree.chart.JFreeChart,org.jfree.chart.servlet.*" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=GB18030">

<title>Insert title here</title>

</head>

<body>

<%

DefaultPieDataset dpd = new DefaultPieDataset();

dpd.setValue("管理人员", 25);

dpd.setValue("市场人员", 25);

dpd.setValue("开发人员", 45);

dpd.setValue("其他人员", 10);

JFreeChart chart = ChartFactory.createPieChart3D("某公司组织结构图",dpd, true, false, false);

String fileName = ServletUtilities.saveChartAsPNG(chart,800,600,null,session);

//放到服务器的临时文件夹下

//String url = request.getContextPath() + "/servlet/DisplayChart?filename=" + fileName;

String url=request.getContextPath() + "/servlet/DisplayChart?filename=" +fileName;//图片的url

//String url = "C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\temp\\" + fileName;

//C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\我的tomcat的物理地址,图片是放在temp文件夹下的

%>

<img src="<%= url %>" width=800 height=600>

<!--<img src="C:\Program Files\Apache Software Foundation\Tomcat 6.0\temp\jfreechart-20853.png" width=800 height=600 border=0 usemap="#<%= fileName %>">-->

</body>

</html>

注意其中的一些注释,特别是String url = "C:\\Program Files\\Apache Software Foundation\\Tomcat 6.0\\temp\\" + fileName;这是图片的放到位置,能够成功,不过没有很好的移植性和兼容性。推荐大家不要使用。

如果有什么更好的解决方法,请与我联系(QQ:506817493),谢谢。

木子写于2009年4月16日

博客中的一些下载已经放到了百度云了,请根据需要下载。【点我去百度云下载】

最后弱弱地说一下,如果可以的话,转载请提供出处( ),谢谢。

posted on 2010-01-07 20:58 李顺利 阅读(2115) 评论(1)  编辑  收藏

评论:
# re: JFreeChart在JSP(tomcat)中的一些问题(图片不显示)[未登录] 2011-12-13 16:32 | vincent
真好真详细!!
  回复  更多评论
  

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


网站导航: