Spring3 Web MVC 集成Jasper Report生成PDF例子

简介: Spring3 Web MVC 集成Jasper Report生成PDF例子

Spring3 Web MVC 集成JasperReport生成PDF例子


一:环境搭建与配置


1.      安装JDK6以上版本


2.      安装STS, 下载地址如下:http://www.springsource.org/downloads/sts-ggts


3.      下载并安装Tomcat7


4.      创建一个Dynamic Web Project项目,然后选择创建好的项目右键选择


Configuration->convert to Manve Project.


5.      添加web.xml文件,在WEB-INF目录下新建reports, pages, classes三个子目录


6.      新建index.jsp文件在webapp目录下。


7.      最终的项目目录结构如下:

1357399082_9667.png


二:Spring配置详解


在web.xml中配置Spring的DispatchServlet与Context Listener,配置如下:

1357399152_1171.png


在express-servlet.xml中配置spring view解析器

1357399179_3161.png


三:Jasper Report配置详解


在jasper-views.xml添加如下配置

1357399193_4642.png


四:Report内容与数据源


两个报表,演示了子报表的用法,同时还演示了如何想子报表传递数据源,以及参


数传递在报表中显示图像等技巧。需要特别说明的是如果要在报表中使用图像路径


图像必须位于WEB-INF/classes下面,因为JasperReport解析是按找类路径寻找。关


于报表的详细内容建议查看下载以后的源文件,此处不再细说。


五:Controller与注解


Spring3 Controller支持注解(annotation)方式,使用非常方便,生成PDF报表的


Controller代码如下:

package com.gloomyfish.express.controllers;
 
import java.util.HashMap;
import java.util.Map;
 
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JREmptyDataSource;
 
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
 
import com.gloomyfish.report.dao.MockDataFactory;
 
@Controller
public class JasperReportController {
  
  protected static Logger logger = Logger.getLogger("controller");
  
    /**
     * Retrieves the PDF report file
     * 
     * @return
     */
    @RequestMapping(value = "/getpdfReport", method = RequestMethod.GET)
    public ModelAndView doSalesReportPDF(ModelAndView modelAndView) 
     {
    logger.debug("Received request to download PDF report");
    
    // Retrieve our data from a mock data provider
    MockDataFactory dataprovider = new MockDataFactory();
    
    // Assign the datasource to an instance of JRDataSource
    // JRDataSource is the datasource that Jasper understands
    // This is basically a wrapper to Java's collection classes
    JRDataSource categoryData  = dataprovider.getCategoriesData();
 
    // parameterMap is the Model of our application
    Map<String,Object> parameterMap = new HashMap<String,Object>();
    
    // must have the empty data source!!!
    JREmptyDataSource emptyData = new JREmptyDataSource();
    parameterMap.put("datasource", emptyData);
    parameterMap.put("JasperfishSubReportDatasource", categoryData);
    parameterMap.put("JasperfishSummaryInfo", dataprovider.getSummaryInfo());
    
    // pdfReport is the View of our application
    // This is declared inside the /WEB-INF/jasper-views.xml
    modelAndView = new ModelAndView("pdfReport", parameterMap);
    
    // Return the View and the Model combined
    return modelAndView;
  }
}

Mock数据工厂代码如下:

package com.gloomyfish.report.dao;
 
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
 
public class MockDataFactory {
  
  public MockDataFactory()
  {
    System.out.println("create mock up data");
  }
  
  public GloomyFishSummaryInfoBean getSummaryInfo()
  {
    GloomyFishSummaryInfoBean summaryBean = new GloomyFishSummaryInfoBean();
    summaryBean.setBlogURL("http://blog.csdn.net/jia20003");
    summaryBean.setMajorDomain("J2SE, J2EE, WEB developer");
    summaryBean.setName("jia20003");
    summaryBean.setNickName("gloomyfish");
    summaryBean.setRegDate("2003-03-02");
    summaryBean.setWorkYears(8);
    return summaryBean;
  }
  
  public JRDataSource getCategoriesData()
  {
    List<ArticlesCategory> listData = new ArrayList<ArticlesCategory>();
    SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy, hh:mm:ss");
    Date createDte = new Date();
    ArticlesCategory category1 = new ArticlesCategory();
    ArticlesCategory category2 = new ArticlesCategory();
    ArticlesCategory category3 = new ArticlesCategory();
    ArticlesCategory category4 = new ArticlesCategory();
    ArticlesCategory category5 = new ArticlesCategory();
    ArticlesCategory category6 = new ArticlesCategory();
//    ArticlesCategory category7 = new ArticlesCategory();
//    ArticlesCategory category8 = new ArticlesCategory();
//    ArticlesCategory category9 = new ArticlesCategory();
//    ArticlesCategory categoryTen = new ArticlesCategory();
    category1.setCategoryName("Android Development");
    category1.setCount(6);
    category1.setCreateDate(sdf.format(createDte));
    category2.setCategoryName("Swing Desktop Development");
    category2.setCount(21);
    category2.setCreateDate(sdf.format(createDte));
    category3.setCategoryName("JAVA 2D Image Process");
    category3.setCount(56);
    category3.setCreateDate(sdf.format(createDte));
    category4.setCategoryName("J2EE");
    category4.setCount(8);
    category4.setCreateDate(sdf.format(createDte));
    category5.setCategoryName("HTML5");
    category5.setCount(4);
    category5.setCreateDate(sdf.format(createDte));
    category6.setCategoryName("Network Protocols Research");
    category6.setCount(4);
    category6.setCreateDate(sdf.format(createDte));
    category6.setCategoryName("ExtJS Learning");
    category6.setCount(2);
    category6.setCreateDate(sdf.format(createDte));
    listData.add(category1);
    listData.add(category2);
    listData.add(category3);
    listData.add(category4);
    listData.add(category5);
    listData.add(category6);
    JRBeanCollectionDataSource data = new JRBeanCollectionDataSource(listData);
    return data;
  }
 
}

启动运行在浏览器中访问地址为:http://localhost:8080/express/hello.html

六:Deploy与运行


全部代码完成以后,从IDE中运行Maven的clean与install命令,得到war包


将war拷贝到tomcat的webapps下面即可启动tomcat然后从浏览器访问。


点击[Get PDF Report]会自动在新窗口中打开生成的PDF报表文件。


程序运行打开主页面结果如下:

1357399535_2802.png



获取PDF报表在浏览器中打开以后效果如下:

1357399598_4462.png



七:常见问题


1.      必须在applicationContext.xml中导入jasper-views.xml资源否则报表不会被编译


         为jasper文件


2.      Web.xml的servlet名必须与spring的xxx-servlet.xml中的xxx一致


3.      Jasper-views.xml中声明的子报表路径参数与数据参数必须与报表文件jrxml中保


        持一致


4.      报表中field变量名必须与Java Class中的field变量名一一对应。



八:项目文件打包下载,解压缩作为Maven项目导入以后运行clean与 install命令。


下载地址:http://download.csdn.net/detail/jia20003/4963552


转载请注明-2013-01-05

相关文章
|
5月前
|
JSON API 数据处理
Winform管理系统新飞跃:无缝集成SqlSugar与Web API,实现数据云端同步的革新之路!
【8月更文挑战第3天】在企业应用开发中,常需将Winform桌面应用扩展至支持Web API调用,实现数据云端同步。本文通过实例展示如何在已有SqlSugar为基础的Winform系统中集成HTTP客户端调用Web API。采用.NET的`HttpClient`处理请求,支持异步操作。示例包括创建HTTP辅助类封装请求逻辑及在Winform界面调用API更新UI。此外,还讨论了跨域与安全性的处理策略。这种方法提高了系统的灵活性与扩展性,便于未来的技术演进。
295 2
|
7月前
|
前端开发 安全 数据库
Web架构&前后端分离站&Docker容器站&集成软件站&建站分配
Web架构&前后端分离站&Docker容器站&集成软件站&建站分配
215 1
|
6月前
|
设计模式 前端开发 数据库
深入理解MVC设计模式:构建高效Web应用程序的基石
【7月更文挑战第4天】在软件工程领域,设计模式是解决常见问题的一系列经过验证的方法。其中,Model-View-Controller(MVC)设计模式自诞生以来,便成为了构建用户界面,特别是Web应用程序的黄金标准。MVC通过将应用程序逻辑分离为三个核心组件,提高了代码的可维护性、可扩展性和重用性。本文将深入探讨MVC设计模式的原理,并通过一个简单的代码示例展示其应用。
248 0
|
3月前
|
存储 缓存 安全
如何使用 PHP 将天气跟踪集成到 Web 应用程序中
如何使用 PHP 将天气跟踪集成到 Web 应用程序中
40 0
|
4月前
|
前端开发 安全 Java
技术进阶:使用Spring MVC构建适应未来的响应式Web应用
【9月更文挑战第2天】随着移动设备的普及,响应式设计至关重要。Spring MVC作为强大的Java Web框架,助力开发者创建适应多屏的应用。本文推荐使用Thymeleaf整合视图,通过简洁的HTML代码提高前端灵活性;采用`@ResponseBody`与`Callable`实现异步处理,优化应用响应速度;运用`@ControllerAdvice`统一异常管理,保持代码整洁;借助Jackson简化JSON处理;利用Spring Security增强安全性;并强调测试的重要性。遵循这些实践,将大幅提升开发效率和应用质量。
76 7
|
4月前
|
前端开发 测试技术 开发者
MVC模式在现代Web开发中有哪些优势和局限性?
MVC模式在现代Web开发中有哪些优势和局限性?
|
5月前
|
机器学习/深度学习 存储 前端开发
实战揭秘:如何借助TensorFlow.js的强大力量,轻松将高效能的机器学习模型无缝集成到Web浏览器中,从而打造智能化的前端应用并优化用户体验
【8月更文挑战第31天】将机器学习模型集成到Web应用中,可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库,提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器,并通过具体示例代码展示最佳实践。首先,需在HTML文件中引入TensorFlow.js库;接着,可通过加载预训练模型如MobileNet实现图像分类;然后,编写代码处理图像识别并显示结果;此外,还介绍了如何训练自定义模型及优化模型性能的方法,包括模型量化、剪枝和压缩等。
85 1
|
5月前
|
jenkins 持续交付 开发工具
"引爆效率革命!Docker+Jenkins+GIT+Tomcat:解锁持续集成魔法,一键部署Java Web应用的梦幻之旅!"
【8月更文挑战第9天】随着软件开发复杂度的增加,自动化变得至关重要。本文通过实例展示如何结合Docker、Jenkins、Git与Tomcat建立高效的持续集成(CI)流程。Docker确保应用环境一致性;Jenkins自动化处理构建、测试和部署;Git管理源代码版本;Tomcat部署Web应用。在Jenkins中配置Git插件并设置项目,集成Docker构建Tomcat应用镜像并运行容器。此外,通过自动化测试、代码质量检查、环境隔离和日志监控确保CI流程顺畅,从而显著提高开发效率和软件质量。
95 3
|
5月前
|
开发者 前端开发 Java
架构模式的诗与远方:如何在MVC的田野上,用Struts 2编织Web开发的新篇章
【8月更文挑战第31天】架构模式是软件开发的核心概念,MVC(Model-View-Controller)通过清晰的分层和职责分离,成为广泛采用的模式。随着业务需求的复杂化,Struts 2框架应运而生,继承MVC优点并引入更多功能。本文探讨从MVC到Struts 2的演进,强调架构模式的重要性。MVC将应用程序分为模型、视图和控制器三部分,提高模块化和可维护性。
52 0
|
5月前
|
Java 开发者 前端开发
Struts 2、Spring MVC、Play Framework 上演巅峰之战,Web 开发的未来何去何从?
【8月更文挑战第31天】在Web应用开发中,Struts 2框架因强大功能和灵活配置备受青睐,但开发者常遇配置错误、类型转换失败、标签属性设置不当及异常处理等问题。本文通过实例解析常见难题与解决方案,如配置文件中遗漏`result`元素致页面跳转失败、日期格式不匹配需自定义转换器、`&lt;s:checkbox&gt;`标签缺少`label`属性致显示不全及Action中未捕获异常影响用户体验等,助您有效应对挑战。
107 0