随笔 - 251  文章 - 504  trackbacks - 0
<2007年1月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

本博客系个人收集材料及学习记录之用,各类“大侠”勿扰!

留言簿(14)

随笔分类

收藏夹

My Favorite Web Sites

名Bloger

非著名Bloger

搜索

  •  

积分与排名

  • 积分 - 200393
  • 排名 - 285

最新评论

一、引子:前期试验工作
1.直接在jasperreports-1.3.0-project工程中运行,ant编译"demo\samples\webapp"的build.xml,可以直接看到由webapp中的.jrxml文件定义的报表格式,但是无法显示数据源的数据;

2.上述ant编译"demo\samples\webapp"的build.xml时,也出现了"-Xlint:unchecked" 和"- Xlint:deprecation"的版本兼容问题的错误,在build.xml中加入编译参数后,没什么变化,依然只是能看到.jrxml文件定义的报表格式,无法显示数据;

3.运行<target name="viewDesign">时出错,提示:
viewDesign:
     [java] net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: reports\WebappReport.jasper
     [java] at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:75)

查看了一下"webapp\reports"目录,果然没有编译好的WebappReport.jasper文件,那么是操作问题导致编译出错无法把.jrxml编译成.jasper,还是程序本身就没有调用编译设计文件的代码?

4.查看build.xml文件中<target name="viewDesign">运行的net.sf.jasperreports.view.JasperDesignViewer类的源代码,以及看build.xml中提供的参数,发现JasperDesignViewer类只是根据传入的.jrxml或者.jasper文件的路径显示报表,并不负责编译和填充xml设计文件;

5.ok,webapp示例应该就是只提供了在web服务器中跑的支持,并不同时提供直接applet方式显示,简单让它能够根据.jrxml或者.jasper源设计文件看一下报表格式而已。因为applet方式显示报表的示例charts中都有了,也没必要提供支持了。

6.所以,如有要显示webapp示例,只能在web服务器中部署运行了。这个示例也正是用来展示web环境下如何使用jasperreports开发报表的!

7.部署webapp示例详见下文;

二、myeclipse+tomcat部署运行jasperreports的webapp示例step by step
1.在eclipse中新建web 工程:"jasperwebappproject";

2.把"jasperreports-1.3.0-project\demo\samples\webapp"下的所有文件拷贝到新建的web工程("jasperwebappproject")的webroot下;

注意:
 * 此时新工程的webroot目录就与原webapp目录结构对应上了(不要把该webapp文件夹也拷贝过去了,因为新建web工程就默认有webroot根目录了),拷贝时要覆盖掉新建工程时webroot下的原WEB-INF目录;

 *一定要确保webapp\WEB-INF\classes目录的下的三个源代码文件夹(datasource、scriptlets、servlets)和web.xml文件都拷贝过去了!!
因为本人操作的时候发现,有时候原WEB-INF文件能够全部拷贝过去,有时候skip掉没有拷贝过去。

 *如果没有把该web.xml拷贝过去,将无法运行示例中的servlet samples,并且jsp samples中也无法显示图片!因为web.xml中没有配置ImageServlet:
<servlet>
<servlet-name>ImageServlet</servlet-name>
<servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>ImageServlet</servlet-name>
<url-pattern>/servlets/image</url-pattern>
</servlet-mapping>

3.把"jasperreports-1.3.0-project\lib"与"jasperreports-1.3.0-project\dist"下的所有jar包拷贝到新建工程的lib下;
注释:其实只需要拷贝webapp中build.xml文件中要include的jar包,不过本人懒得一一去对了,把所有的jar包都加上,图省事;

4.右键新建工程"jasperwebappproject"->"Properties"->"Java build path"->"source"-"add folder...",把"jasperwebappproject\webroot\WEB-INF\classes"文件夹打上勾,即:把classes文件夹也设置为source folder;因为classes文件夹下有.java源文件,如果不设置为source folder,就需要手工编译了,并且eclipse还可能因为自动编译把该classes的源文件全部清空,因为src是空的。
所以,一定要把classes文件夹设置为source folder;

注:
"Java build path"->"source"中有一选项"allow output folders for source folders",按字面理解应该是把该项选上就是把默认的输出路径WEB-INF\classes设置为source folder了,但是我把它选上了,好像没有效果,只是当时把classes加入source树了,但是下次再查看工程properties还是原样,工程中也没有把classes当作source folder,而且还把classes目录清空了。
选项"allow output folders for source folders"到底是干什么用的呢?不知道了,期待知道的回答一下,万分感谢!

5.此时,我们把webapp下的所有文件和需要的所有jar包都拷贝到新工程了,并且把WEB-INF\classes设置为source folder了;但是如果此时转换到J2EE development视图的话,会发现工程中报了很多错误,主要是.jsp文件和.html文件大量报错。.html文件的错误无关紧要,只是多了一些没有开始标签的结束标签,改不改都不影响运行。但是.jsp文件怎么会报错,提示很多类文件找不到呢?所需要的jar包(包括jasperreports-1.3.0.jar)和数据源等文件(WEB-INF\classes\datasource)都在工程中了呀!
解决:
根据以往经验,eclipse中如果直接把别人的代码复制粘贴上去,即使所有的类文件和jar包都存在,也会报错,需要把该.java源文件重新"剪切"粘贴一下,这样就不报错了。
试了一下,把jsp文件夹下的compile.jsp,fill.jsp,viewer.jsp,html.jsp文件前面部分导入包和类的那些语句(eg.<%@ page import="datasource.*" %>)重新剪切粘贴一下,保存,耶,不提示红×错误了!

注:
不理会eclipse中这些.jsp文件的报错也没关系,因为部署到tomcat后,运行时肯定是能够找到所需要的类的,因为那些jar包都在工程中了。不过在eclipse中看着那么多的红×错误,还是剪切粘贴一下消除它,心里比较爽。

6.把工程部署(deploy)到tomcat中;

7.启动tomcat;

8.在IE中输入"http://192.168.3.161:9005/jasperSampleWebapp/index.html",正确显示!
9.点左边的菜单"compile JRXML",点右边的"jsp examples",->"execute",提示编译成功!
10.点左边的菜单"fill report",点右边的"jsp examples",->"execute",提示填充数据成功!
11.点左边的菜单"export report",分别可以以pdf,html等格式输出报表!耶,革命终于胜利!

ok!

三、小结:
    总结运行jasperreports的webapp示例的关键几个步骤:
1.要确保webapp\WEB-INF\classes目录的下的三个源代码文件夹(datasource、scriptlets、servlets)和web.xml文件都拷贝过去了!!
2.要把WEB-INF\classes设置为source folder,否则提示找不到数据源,因为该webapp示例的数据源是WEB-INF\classes\datasource\WebappDataSource.java里的二维数组;
3.要确保把原web.xml复制到工程中了,否则无法显示图片,也无法运行servlet samples;
4.*.jsp文件的报错可通过重新剪切粘贴一下来消除;
5.ie中浏览图表时要按照“compile、fill、export”的顺序点击,这样才能顺利看到报表。

四、其他相关内容:
1.把.jrxml编译成.jasper文件的类是:net.sf.jasperreports.engine.JasperCompileManager
方法compileReportToFile:这个方法能够创建一个在整个程序中使用的编译的报告文件(.jasper)。

这个类有两个重载函数,一个只有一个参数,指定.jrxml的路径;另一个有两个参数,分别指定.jrxml的路径和.jasper的输出路径;
compileReportToFile(String srcdir):   编译.jrxml得到.jasper,但是不输出该.jasper文件;
compileReportToFile(String srcdir,String destdir):  编译.jrxml得到.jasper,并且输出该.jasper文件到指定路径;

验证:
法一:
把compile.jsp中的关键的一行代码:
JasperCompileManager.compileReportToFile(application.getRealPath("/reports/WebappReport.jrxml"));
改为:
JasperCompileManager.compileReportToFile(application.getRealPath("/reports/WebappReport.jrxml"),application.getRealPath("/reports/WebappReport.jasper"));

重启tomcat,运行该compile.jsp文件,这时可以在tomcat的目录"tomcat5.5.17\webapps\jasperSampleWebapp\reports"下看到新生成的WebappReport.jasper文件!

法二:
写一个包含main函数的测试类,执行JasperCompileManager.compileReportToFile方法:

package test;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.design.*;

public class testCompileManager{
    public static void main(String[] args) {
        String sourceFileName="E:\\jiangcm\\workspace-forict-myeclipse\\jasperreports\\demo\\samples\\webapp\\reports\\WebappReport.jrxml";
        String destFileName="E:\\jiangcm\\workspace-forict-myeclipse\\jasperreports\\demo\\samples\\webapp\\reports\\WebappReport.jasper";
        try {
            JasperCompileManager.compileReportToFile(sourceFileName, destFileName);
        } catch (JRException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

posted on 2007-01-29 14:14 matthew 阅读(5701) 评论(6)  编辑  收藏 所属分类: 报表设计与开发

FeedBack:
# re: myeclipse+tomcat 环境下jasperreports sample之webapp例子-转贴 2007-04-04 05:41 "chrest2005@yahoo.com"
Dear En.

I Found your web page seems so usful,and i mean the work "seems", as my mother language is not chines.
I am asking u, if u good at english to translate it to english to able to work with jasperReports with Myeclipse because i really found a big problem on findind good pages to explain that topic but i found at search your page and i found some words made me feel that is will help me more but if the language is easier.

thanks alot to waste your time to read my email
Christina  回复  更多评论
  
# re: myeclipse+tomcat 环境下jasperreports sample之webapp例子-转贴[未登录] 2007-04-05 10:16 matthew
Christina,

Can you tell me what problem with your work? Maybe i can help you.But i do not have time to translate all of it to english,at presently.

Thank you to pay attention to my blog!  回复  更多评论
  
# re: myeclipse+tomcat 环境下jasperreports sample之webapp例子-转贴 2007-08-23 11:06 elsa
按着你的方法做有问题耶!  回复  更多评论
  
# re: myeclipse+tomcat 环境下jasperreports sample之webapp例子-转贴 2008-04-11 16:20 上的
谢谢 太及时了 哈哈   回复  更多评论
  
# re: myeclipse+tomcat 环境下jasperreports sample之webapp例子-转贴 2008-09-05 15:44 zb
我这里怎么没有index.html呢?  回复  更多评论
  
# re: myeclipse+tomcat 环境下jasperreports sample之webapp例子-转贴[未登录] 2009-09-24 15:08 123
feichang hao zuo 做出来了 非常好  回复  更多评论
  

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


网站导航: