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

简介: Spring3 Web MVC 集成JasperReport生成PDF例子 一:环境搭建与配置 1.      安装JDK6以上版本 2.      安装STS, 下载地址如下:http://www.

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.      最终的项目目录结构如下:


二:Spring配置详解

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


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


三:Jasper Report配置详解

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


四: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报表文件。

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


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


七:常见问题

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


目录
相关文章
|
2天前
|
人工智能 自然语言处理 Java
Spring 集成 DeepSeek 的 3大方法(史上最全)
DeepSeek 的 API 接口和 OpenAI 是兼容的。我们可以自定义 http client,按照 OpenAI 的rest 接口格式,去访问 DeepSeek。自定义 Client 集成DeepSeek ,可以通过以下步骤实现。步骤 1:准备工作访问 DeepSeek 的开发者平台,注册并获取 API 密钥。DeepSeek 提供了与 OpenAI 兼容的 API 端点(例如),确保你已获取正确的 API 地址。
Spring 集成 DeepSeek 的 3大方法(史上最全)
|
1月前
|
监控 Java Nacos
使用Spring Boot集成Nacos
通过上述步骤,Spring Boot应用可以成功集成Nacos,利用Nacos的服务发现和配置管理功能来提升微服务架构的灵活性和可维护性。通过这种集成,开发者可以更高效地管理和部署微服务。
208 17
|
1月前
|
人工智能 安全 Dubbo
Spring AI 智能体通过 MCP 集成本地文件数据
MCP 作为一款开放协议,直接规范了应用程序如何向 LLM 提供上下文。MCP 就像是面向 AI 应用程序的 USB-C 端口,正如 USB-C 提供了一种将设备连接到各种外围设备和配件的标准化方式一样,MCP 提供了一个将 AI 模型连接到不同数据源和工具的标准化方法。
|
1月前
|
缓存 安全 Java
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
369 12
|
1月前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
84 8
|
2月前
|
XML Java API
Spring Boot集成MinIO
本文介绍了如何在Spring Boot项目中集成MinIO,一个高性能的分布式对象存储服务。主要步骤包括:引入MinIO依赖、配置MinIO属性、创建MinIO配置类和服务类、使用服务类实现文件上传和下载功能,以及运行应用进行测试。通过这些步骤,可以轻松地在项目中使用MinIO的对象存储功能。
149 5
|
3月前
|
消息中间件 Java Kafka
什么是Apache Kafka?如何将其与Spring Boot集成?
什么是Apache Kafka?如何将其与Spring Boot集成?
110 5
|
2月前
|
前端开发 安全 JavaScript
2025年,Web3开发学习路线全指南
本文提供了一条针对Dapp应用开发的学习路线,涵盖了Web3领域的重要技术栈,如区块链基础、以太坊技术、Solidity编程、智能合约开发及安全、web3.js和ethers.js库的使用、Truffle框架等。文章首先分析了国内区块链企业的技术需求,随后详细介绍了每个技术点的学习资源和方法,旨在帮助初学者系统地掌握Dapp开发所需的知识和技能。
2025年,Web3开发学习路线全指南
|
3月前
|
存储 前端开发 JavaScript
如何在项目中高效地进行 Web 组件化开发
高效地进行 Web 组件化开发需要从多个方面入手,通过明确目标、合理规划、规范开发、加强测试等一系列措施,实现组件的高效管理和利用,从而提高项目的整体开发效率和质量,为用户提供更好的体验。
55 7
|
3月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
66 2