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

来源:互联网 发布:php解析视频 编辑:程序博客网 时间:2024/05/01 07:30

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

 

环境:Myeclipse tomcat JFreechart

 

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

 

1.  代码要准确

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

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

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

 

2.  配置要准确

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

public class 
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 继续在web.xml上做文章

修改

<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>*.action</url-pattern>
 </filter-mapping>

<filter-mapping>
  <filter-name>struts2</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

重启tomcat,发现重启tomcat服务器竟然报错误。

 

5. 在第4点的基础上继续跟踪浏览器报错信息The Struts dispatcher cannot be found.  This is usually caused by using Struts tags without the associated filter. Strut s tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location]

环境:struts2
原因:如果想要在jsp文件中,采用 struts的tag,那么jsp必须是通过action跳转得到,也就是必须通过web.xml所配置的过滤器访问文件,否则会有异常。

web.xml 中添加一个filter 

在第4点修改后的基础上加入如下语句:

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/action/*</url-pattern>
</filter-mapping>

至此,问题得到解决。

原创粉丝点击