设为首页 收藏本站
查看: 581|回复: 0

[经验分享] JFreeChart在JSP(tomcat)中的一些问题(图片不显示)

[复制链接]
发表于 2017-2-4 08:17:30 | 显示全部楼层 |阅读模式
Googel 标签: 李顺利 ;Java ;Java EE ;JFreeChart ;JSP ;tomcat ;图片不显示 ;红叉

  JFreeChart在JSP(tomcat)中的一些问题(图片不显示)
  环境:Myeclipse tomcat JFreechart  
  最近在学习jfreechart的时候,跟着许多网上的实例,一点一点做,后面发现了一个大家应该都差不多经历的错误,那就是用jfreechart已经生成的图片(图片已经在tomcat的临时目录下\Tomcat 6.0\temp),不过在浏览器下浏览的时候竟然显示不了(显示一个红叉 DSC0000.jpg )。碰到问题后,就上网搜了好多,发现也是有很多人遇到同样的问题,解决的方案都说的不够详细,现谈一下我的解决方法的,希望给需要帮忙快速解决。
  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的,为什么在做这个的时候竟然出现了另一个???难道是我的误操作???

DSC0001.jpg

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

  浏览器结果

DSC0002.jpg

  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日

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-337171-1-1.html 上篇帖子: 在tomcat上部署pentaho 1.5.3 下篇帖子: https单向/双向认证及tomcat配置https方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表