特隆摩托能开?:整合Struts2+JasperReport Web报表应用示例

来源:百度文库 编辑:偶看新闻 时间:2024/04/27 23:20:52
整合Struts2+JasperReport Web报表应用示例 JasperReports作为一种优秀且开源的报表引擎,不利用太可惜了。同时,借助开源的JasperReports模板设计利器iReports,可以可视化的设计报表模板。基于Web的报表在很多项目中都是需要的。而随着Struts2的流行,就应该研究一下在Struts2下如何利用JasperReports进行报表输出。本示例比较简单,采用的数据源即为JavaBean,而没有采用复杂的数据库,其实原理是一样的。只是传递给JasperReports的参数随着连接方式的变化而略加修改而已。一 准备工作所使用的类库及Jar包如下图所示:
图1.使用的Jar包开发环境:MyEclipse5.5+Eclipse3.2+JDK5.0+Tomcat5.5+Struts 2.0.6。当然,本该所提供的源代码下载中没有提供相关的lib,因为文件大太,如果需要,请留下email。源代码下载:Struts2AndJasperReport.rar二 设计报表模板本例中采用JavaBean作为数据源,用于显示People对象的一些基本属性,如所在序号、城市、姓名、地址,并对同一城市的人员进行汇总小结显示。至于如何在iReports中设计模板文件,请在网上参考其它文档。这里不再详细解读,或有时间俺再另写文章来具体讲解如何在iReports中设计报表模板。WebRoot\jasper\jasper_template.jrxml代码如下:



         name="jasper_template"
         columnCount="1"
         printOrder="Vertical"
         orientation="Portrait"
         pageWidth="595"
         pageHeight="842"
         columnWidth="535"
         columnSpacing="0"
         leftMargin="30"
         rightMargin="30"
         topMargin="20"
         bottomMargin="20"
         whenNoDataType="NoPages"
         isTitleNewPage="false"
         isSummaryNewPage="false">
   
   
   
   
       
       
   

   
       
   
   
       
   

   
       
   

   
       
   

   
       
   
   
       
   

   
       
   
       
           
           
           
           

           

           
           
               
                                            x="98"
                        y="5"
                        width="51"
                        height="25"
                        key="staticText-8"/>
                   
                   
                       
                   

               
               

               
                                            x="149"
                        y="5"
                        width="34"
                        height="25"
                        key="textField-7"/>
                   
                   
                       
                   

               
               

               
                                            x="-30"
                        y="36"
                        width="593"
                        height="0"
                        key="line-5"/>
                   
               

           

           

       
       
           
           

       

        <br>            <band height="62"  isSplitAllowed="true" ><br>                <staticText><br>                    <reportElement<br>                        x="20"<br>                        y="0"<br>                        width="484"<br>                        height="57"<br>                        forecolor="#FF0033"<br>                        key="staticText-1"/><br>                    <box topBorder="None" topBorderColor="#000000" leftBorder="None" leftBorderColor="#000000" rightBorder="None" rightBorderColor="#000000" bottomBorder="None" bottomBorderColor="#000000"/><br>                    <textElement textAlignment="Center"><br>                        <font fontName="瀹嬩綋" pdfFontName="STSong-Light" size="36" isPdfEmbedded ="true" pdfEncoding ="UniGB-UCS2-H"/><br>                    </textElement><br>                <text><![CDATA[Struts2+JasperReports绀轰緥]]></text><br>                </staticText><br>                <line direction="TopDown"><br>                    <reportElement<br>                        x="-30"<br>                        y="61"<br>                        width="594"<br>                        height="0"<br>                        key="line-4"/><br>                    <graphicElement stretchType="NoStretch"/><br>                </line><br>            </band><br>       
       
           
               
                                            x="-29"
                        y="12"
                        width="592"
                        height="0"
                        key="line-3"/>
                   
               

           

       

       
           
               
                                            x="13"
                        y="5"
                        width="62"
                        height="33"
                        key="staticText-2"/>
                   
                   
                       
                   

               
               

               
                                            x="98"
                        y="5"
                        width="62"
                        height="33"
                        key="staticText-3"/>
                   
                   
                       
                   

               
               

               
                                            x="212"
                        y="5"
                        width="62"
                        height="33"
                        key="staticText-4"/>
                   
                   
                       
                   

               
               

               
                                            x="331"
                        y="5"
                        width="62"
                        height="33"
                        key="staticText-5"/>
                   
                   
                       
                   

               
               

               
                                            x="-30"
                        y="43"
                        width="596"
                        height="0"
                        key="line-2"/>
                   
               

           

       

       
           
               
                                            x="13"
                        y="7"
                        width="62"
                        height="30"
                        key="textField-1"/>
                   
                   
                       
                   

               
               

               
                                            x="98"
                        y="7"
                        width="105"
                        height="29"
                        key="textField-2"/>
                   
                   
                       
                   

               
               

               
                                            x="212"
                        y="8"
                        width="100"
                        height="28"
                        key="textField-3"/>
                   
                   
                       
                   

               
               

               
                                            x="331"
                        y="7"
                        width="111"
                        height="30"
                        key="textField-4"/>
                   
                   
                       
                   

               
               

               
                                            x="-30"
                        y="37"
                        width="593"
                        height="0"
                        key="line-1"/>
                   
               

           

       

       
           
           

       

       
           
               
                                            x="98"
                        y="18"
                        width="138"
                        height="23"
                        key="textField-8"/>
                   
                   
                       
                   

               
               

               
                                            x="239"
                        y="18"
                        width="83"
                        height="23"
                        key="textField-9"/>
                   
                   
                       
                   

               
               

           

       

       
           
           

       

       
           
           

       


 
这里需要说明的是,由于俺们中国的中文比较特殊,由此在PDF中显示的时候,需要一些额外的Jar包字体来支持。因此需要下载iTextAsian.jar包,此包专门用于显示亚洲的字符。
 三 设计JavaBean
 由本例中没有使用数据库,而是使用JavaBean作为JRDataSource,来传递给JasperReports作为数据源,因此只需要设计JavaBean。\src\com\sterning\PeopleBean.java的代码很简单,只在字个字段:city、id、name、street,代码如下所示:
package com.sterning;public class PeopleBean
{
    private String city = null;
    private Integer id = null;
    private String name = null;
    private String street = null;    public PeopleBean(
        String pcity,
        Integer pid,
        String pname,
        String pstreet
        )
    {
        city = pcity;
        id = pid;
        name = pname;
        street = pstreet;
    }    public PeopleBean getMe()
    {
        return this;
    }    public String getCity()
    {
        return city;
    }    public Integer getId()
    {
        return id;
    }    public String getName()
    {
        return name;
    }    public String getStreet()
    {
        return street;
    }

四 编译模板
其实表面上说是填充数据,其实就是填充一个List。具体的工具都是交给我们的JasperReports去完成。JasperReports要完成数据的填充工作,要经历将编译(将模板文件.jrxml编译成.jasper文件)、加载(加载.jasper文件)、填充(从数据源中取得数据并填充到.jasper二进制文件中)三大步骤。src\com\sterning\JasperAction.java,其代码如下所示:
package com.sterning;import java.io.File;
import java.util.ArrayList;
import java.util.List;import net.sf.jasperreports.engine.JasperCompileManager;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class JasperAction extends ActionSupport {
    private static final long serialVersionUID = 1L;    private List myList;    public String execute() throws Exception {
        //添加数据
        PeopleBean p1=new PeopleBean("长沙", new Integer(9), "李化", "天洒路");
        PeopleBean p2=new PeopleBean("长沙", new Integer(22), "王小样", "呆小路564");
        PeopleBean p3=new PeopleBean("南昌", new Integer(23), "王奸可", "小顺路");
        PeopleBean p4=new PeopleBean("南昌", new Integer(32), "李洒", "顺濉路");
        PeopleBean p5=new PeopleBean("武汉", new Integer(39), "张中尖", "天洒路");
        PeopleBean p6=new PeopleBean("武汉", new Integer(35), "陈主宁", "天河路564");
        myList = new ArrayList();
        myList.add(p1);
        myList.add(p2);
        myList.add(p3);
        myList.add(p4);
        myList.add(p5);
        myList.add(p6);        try {
            String reportSource;
            reportSource = ServletActionContext.getServletContext()
                    .getRealPath("/jasper/jasper_template.jrxml");
            File parent = new File(reportSource).getParentFile();
            //将.jrxml模板文件编译成为.jasper文件,当然,其文件名可以指定,如果没指定,则与.jrxml文件名一样.只是后缀不同而已
            JasperCompileManager.compileReportToFile(reportSource, new File(
                    parent, "compiled_jasper_template.jasper")
                    .getAbsolutePath());
        } catch (Exception e) {
            e.printStackTrace();
            return ERROR;
        }
        return SUCCESS;
    }    public List getMyList() {
        return myList;
    }

五 配置Struts2文件
前面这些工作都是为JasperReports而作的。接下来就是将JasperReports集成到Struts2中。
1.  Web.xml
首先是Web.xml。这个文件配置比较简单,也比较常规,没什么好说,代码如下WebRoot\WEB-INF\web.xml:

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
   
        struts2
       
            org.apache.struts2.dispatcher.FilterDispatcher
       

       
            config
           
                struts-default.xml,struts-plugin.xml,struts.xml
           

       

   

   
        struts2
        /*
   
   
   
        index.jsp
   


 
2.  struts.xml
按理说struts.xml配置文件应该更加简单,但这里由于集成了JasperReports,所以看上去要复杂一点。先来看代码:src\ struts.xml:

    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

            extends="struts-default,jasperreports-default">
       
           
               
                    /jasper/compiled_jasper_template.jasper
               
                myList
                PDF
           

       

       
           
               
                    /jasper/compiled_jasper_template.jasper
               
                myList
                HTML
           

       

       
           
               
                    /jasper/compiled_jasper_template.jasper
               
                myList
                XML
           

       

       
           
               
                    /jasper/compiled_jasper_template.jasper
               
                myList
                CSV
           

       

       
           
               
                    /jasper/compiled_jasper_template.jasper
               
                myList
                XLS
           

       

   


 
这里,当调用JasperAction的execute()方法成功后,返回后,可见有三个参数:location告诉JasperReports数据填充类二进制的.jasper文件的位置,dataSource指明使用什么数据源,format指明报表输出的格式。 
六 页面文件Index.jsp的代码非常的简单,如下:<%@ page language="java" pageEncoding="GB2312"%>


   
        Struts2+ JasperReports 使用示例
   
   
        HTML
       

        PDF
       

        XML
       

        CSV
       

        XLS
   
 
七运行效果1.HTML格式 图2.HTML格式2.PDF格式
图3.PDF格式3.XML格式
图4.XML格式4.Excel格式
图5.Excel格式发表于 @ 2008年09月22日 22:52:00 | 评论( 2 ) | 编辑| 举报| 收藏 旧一篇:struts框架处理流程 | 新一篇:使用JasperReport与iBATIS开发Web报表
-
查看最新精华文章 请访问博客首页相关文章
NICTCLAS:词法分析系统ICTCLAS的.NET版(源码提供下载)AjaxPro.NET实现TextBox智能获取服务端数据功能(Asp.net 2.0)(示例代码下载)AjaxPro.NET框架生成高效率的Tree(Asp.net 2.0)(示例代码下载)ASP.NET 2.0 正式版中callback的一些变化+使用示例Ajax 实现在WebForm中拖动控件并即时在服务端保存状态数据 (Asp.net 2.0)(示例代码下载)ASP.NET 2.0 中的新特性: 异步页功能(示例代码下载)AjaxPro.NET框架生成高效率的Tree(Asp.net 2.0)(示例代码下载)整合Struts2+JasperReport Web报表应用示例zzycy08 发表于2008年12月3日 星期三 16:59:17  IP:举报回复删除
能不能给我发一个,邮箱:zzycy04@163.com,谢谢,另外有没有不用struts2完成的,我没用过struts2,不知道怎么用,Thanks~~~~~~~wei19860919 发表于2009年5月24日 星期日 21:08:43  IP:举报回复删除
能把类库和包发给我吗,我的邮箱是:wxg1349@163.com,谢谢!发表评论表 情:          评论内容: 用 户 名:登录 注册 匿名评论 匿名用户验 证 码:  重新获得验证码
  专区推荐内容用C#实现HTTP协议下的多线程文件传输
【实战】搭建Meego Tablet开发测试平台
AppUp Center为更多程序员创造机会
【源码分享】一个多线程下载文件的程序
轻松漫画聊快速构建网站
如何创建一个简单的Qt应用程序
【赢取旧金山之旅】2011线程挑战赛
【图】爱上NOOK COLOR的5个理由
IPAD&NOOK COLOR屏幕对比多图
【教程】AppUp 进阶基础篇
Nokia CEO:下一步会与谁合作?
点评三星Smart TV智能电视
太震撼了!首次参加IDF有感
【教程】基于VC色温图效果实现
【教程】游戏技巧特效处理
Firefox 4在meego上成功安装
IDF2011:多图详解MeeGo 3月后正式发布
PayPal助力移动支付应用
Android应用换电视,前30名有效!
【教程】笔记本安装MeeGo
微软BI解决方案开发简介
下载Windows Phone 中文培训包
下载 Windows Phone 开发工具
全新Windows Phone 开发中心
VS2010 SharePoint 入门
【免费下载】WebMatrix建站工具
AIX 专区有奖话题讨论
4.21日Adobe企业RIA开发者研讨会
【周周有礼】获奖其实很简单,不信来试试!
2011云计算北京研讨会 6.22
企业信息化也会亚健康,1分钟调研拿iPad2
Qt 4.7.3编译MYsql驱动
羡慕嫉妒恨!MeeGO平板到手
MeeGo SDK 1.2 for Linux 初窥
2011台北国际电脑展开幕(5.31-6.4)
关于QT编程入门的那些事
相见 ——“人生若只如初见”
游戏远程代码注入和动态连接库的使用
哥是传奇—组团参赛心得
【教程】Windows平台下MeeGo v1.2 SDK的安装
MeeGo 1.2 正式版发布
在生命走到尽头前用脚贡献了最后一个代码补丁
浅谈QT中窗口刷新事件
赢笔记本电脑,提升管理软件新水平!
【教程】安装MeeGO和Windows 7双系统的方法
分享我的个人初赛体会
Nokia宣布Qt 5计划
立即加入IBM dW,万千技术尽网罗
Linux 上简单的MeeGo 开发 QT 程序
软件产品性能优化注意事项
<<>> 热门招聘职位 【更多】【广州菲音】高薪诚聘C++游戏服务器端开发工程师等各类游戏开发人才
知名社交手游公司DeNA China 10K-30K高薪诚聘开发类人才
【盛旋软件】诚聘英才之图形图像、网站开发、游戏开发工程师!
【傲盾软件】高薪诚聘C、C++、JAVA、cavium/linux工程师
【道达天际】高薪诚聘:渗透测试、网络安全、逆向技术分析 专业人才
诚聘高级软件工程师,架构师,待遇从优
【山重融资】诚聘软件开发工程师、网络管理工程师
【卓坤信息】诚聘MFC高级客户端、网页设计师、PHP开发等
爱福康诚招:C++ / Directshow 软件工程师
【天健集团】诚聘架构师,高级软件开发工程师(.NET、PB、J2EE),实施人员
爱唱数码诚聘 研发经理&程序员
【北京联银通科技有限制公司】高薪诚聘技术经理、高级工程师等职位
【安博教育】诚聘软件开发、架构师、技术总监等技术人才
【Autodesk】欧特克软件(中国)诚聘软件开发,测试,研究员
【北京平川嘉恒】团队Leader及客户端/服务器端研发工程师
【欢网科技】诚聘系统架构师、需求分析师、开发工程师
【酷狗音乐】诚聘VC、服务端开发工程师等职位
【法国电信】诚聘研发类人才
【飞漫公司】诚聘C/C++研发工程师、软件测试等!
【完美世界】(原完美时空)诚聘各类游戏领域人才
【亿阳信通】诚邀您的加盟!
【Amazon】亚马逊诚聘技术专家!
【航天信息股份有限公司】诚聘系统架构,需求分析、JAVA开发、C/C++开发研发岗位热招中
【杭州引力】高薪诚聘ios开发人员
【广州菲音】高薪诚聘C++游戏服务器端开发工程师等各类游戏开发人才
知名社交手游公司DeNA China 10K-30K高薪诚聘开发类人才
【盛旋软件】诚聘英才之图形图像、网站开发、游戏开发工程师!
【傲盾软件】高薪诚聘C、C++、JAVA、cavium/linux工程师
【道达天际】高薪诚聘:渗透测试、网络安全、逆向技术分析 专业人才
诚聘高级软件工程师,架构师,待遇从优
【山重融资】诚聘软件开发工程师、网络管理工程师
【卓坤信息】诚聘MFC高级客户端、网页设计师、PHP开发等
爱福康诚招:C++ / Directshow 软件工程师
【天健集团】诚聘架构师,高级软件开发工程师(.NET、PB、J2EE),实施人员
爱唱数码诚聘 研发经理&程序员
【北京联银通科技有限制公司】高薪诚聘技术经理、高级工程师等职位
【安博教育】诚聘软件开发、架构师、技术总监等技术人才
【Autodesk】欧特克软件(中国)诚聘软件开发,测试,研究员
【北京平川嘉恒】团队Leader及客户端/服务器端研发工程师
【欢网科技】诚聘系统架构师、需求分析师、开发工程师
【酷狗音乐】诚聘VC、服务端开发工程师等职位
【法国电信】诚聘研发类人才
【飞漫公司】诚聘C/C++研发工程师、软件测试等!
【完美世界】(原完美时空)诚聘各类游戏领域人才
【亿阳信通】诚邀您的加盟!
【Amazon】亚马逊诚聘技术专家!
【航天信息股份有限公司】诚聘系统架构,需求分析、JAVA开发、C/C++开发研发岗位热招中
【杭州引力】高薪诚聘ios开发人员
. 公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告
北京创新乐知信息技术有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
江苏乐知网络技术有限公司 提供商务支持
 Email:webmaster@csdn.net
Copyright © 1999-2011, CSDN.NET, All Rights Reserved
 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tpf01/archive/2008/09/23/2963841.aspx