JasperReport for Servlet Demo

最近需要使用到JAVA报表,看了许多报表工具,还是决定使用开源的,纯JAVA实现的JasperReport,所以用JasperReport+ iReportDesigner写了个DEMO

使用JapserReport 生成报表,需要有几个步骤:

1、生成报表的XML文件,可以自己手写,不过实在太复杂,所以使用JR提供的生成报表工具iReport来生成。

2、在项目中加入相关的JAR包。

3、码代码。

准备工作:

先在他的官网下载需要的资源包JasperReportLibrary ,Demo需要用到的就是jasperreports-5.6.1-project.zip(包含很多例子和他的实例数据库等)和jasperreports-5.6.1.jar。和报表设计工具iReportDesigner

正文:

1、设计报表,iReportDesigner的使用可以参考官网WIKI:Designing a report,如果需要像示例中一样使用他的示例数据库hsqldb,需要先安装ant,然后先进入jasperreports-5.6.1-project.zip解压出来的目录下,在\demo\hsqldb目录下运行ant
runServer即可启动。报表设计完毕之后,在iReportDesigner中进行preview,则会在你选择的目录生成两个文件,一个后缀为.jrxml的文件,这个是还没编译的XML文件,如果使用它的话需要在代码中编译(一行代码就搞定了),一个是后缀为.jasper的文件,这个可以在代码中直接使用。

2、建一个普通的WEB工程,在项目中加入所需的jar包:

jasperreports-5.6.1.jar是之前下载的,其它的都可以在jasperreports-5.6.1-project中的lib目录下找到。

3、项目就简单的两个类,一个DBProvider.java和一个JasperCall.java

DBProvider:

package com.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBProvider {
	private static String url = "jdbc:hsqldb:hsql://127.0.0.1/";
	private static String user = "sa";
	private static String password = null;
	static {
		try {
			Class.forName("org.hsqldb.jdbcDriver");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static Connection getConnection(){
		Connection conn = null;
		try {
			conn = DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return conn;
	}
}

JasperCall:

package com.servlet;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperRunManager;

import com.dao.DBProvider;

public class JasperCall extends HttpServlet{
	private static final long serialVersionUID = -3027634892022588588L;
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		ServletOutputStream out = resp.getOutputStream();
		resp.setCharacterEncoding("utf-8");

		//这是PDF用的路径
		//String pdfAddr = "D:/project/jasperDesigns/myFirstReport.jrxml";

		String htmlAddr = "D:/project/jasperDesigns/myFirstReport.jasper";
		Connection con = DBProvider.getConnection();
		try {
			// 转成PDF
			//JasperReport jr = JasperCompileManager.compileReport("D:/project/jasperDesigns/myFirstReport.jrxml");	//编译XML
			//byte[] pdfs = JasperRunManager.runReportToPdf(jr, null, con);
			//resp.setContentType("application/pdf");
			//resp.setContentLength(pdfs.length);
			//out.write(pdfs);

			//转成HTML
			String file = JasperRunManager.runReportToHtmlFile(htmlAddr, null, con); //这里使用的jasper文件,不需要编译
			BufferedInputStream in = new BufferedInputStream(new FileInputStream(new File(file)));
			byte[] buf = new byte[8192];

			while(in.read(buf)!=-1){
				out.write(buf);
			}
			out.flush();
			in.close();
			out.close();
		} catch (JRException e) {
			e.printStackTrace();
		}
	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		this.doPost(req, resp);
	}
}

直接访问这个servlet就可以在浏览器中显示报表了:

时间: 2024-11-08 21:20:03

JasperReport for Servlet Demo的相关文章

Jasperreport源码&demo运行

Jasperreport是著名的报表开源项目,提供了非常丰富的功能,可以满足日常开发中大部分的需求,下面将就该开源项目的demo运行做一些说明. 1.从sourceforge上下载jasperreport的工程http://sourceforge.net/projects/jasperreports/: 2.解压开,并导入eclipse/myeclipse,导入后的目录结构如下: 3.demo目录下为官方对应的示例,有三个目录,分别为hsql(内存数据库),font(字体)和samples(报表

Java下载Servlet Demo

1 request.setCharacterEncoding("utf-8"); 2 String name=request.getParameter("name"); 3 //1.设置响应头 4 response.setContentType("application/force-download"); 5 //2.读取文件 6 String path=getServletContext().getRealPath("/file/&q

Servlet 3.0 新特性详解

转自:https://www.ibm.com/developerworks/cn/java/j-lo-servlet30/ Servlet 3.0 新特性详解 张 建平2010 年 4 月 23 日发布 WeiboGoogle+用电子邮件发送本页面 6 Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署.其

Servlet接口应用(开发servlet三种方式)

第一种:实现Servlet接口 public class ServletDemo1 implements Servlet { @Override public void init(ServletConfig config) throws ServletException { // TODO Auto-generated method stub } @Override public ServletConfig getServletConfig() { // TODO Auto-generated

Servlet 3.0 新特性

Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署.其中有几项特性的引入让开发者感到非常兴奋,同时也获得了 Java 社区的一片赞誉之声: 异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该 Servlet 线程.在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来

Servlet 3.0 新特性概述

Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署.其中有几项特性的引入让开发者感到非常兴奋,同时也获得了 Java 社区的一片赞誉之声: 异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才结束该 Servlet 线程.在接收到请求之后,Servlet 线

JAVAWEB学习总结 SERVLET开发(二)

一.ServletConfig对象 1.1.配置servlet初始化参数 在servlet的配置文件中web.xml中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数. 例如: <servlet> <servlet-name>ServletConfigDemo1</servlet-name> <servlet-class>gacl.servlet.study.ServletConfigDemo1</serv

Servlet学习(2)

1.Servlet的生命的周   (1)当浏览器第一次访问Servlet时,服务器会根据浏览器访问的路径,在web.xml文件中找到该Servlet的全路径,然后利用反射去调用方法. (2)调用init()为Servlet作初始化工作 (3)调用doXxxxx()为浏览器响应 (4)如果浏览器再次访问相同的Servlet,直实现从服务端维护的Servlet实例集合中取得对应的实现,为浏览器响应 (5)同一个Servlet实例,在服务端只有一个 (6)服务器在决定销毁Servlet实例之前,调用d

温故知新--Servlet(一)

工作也大半年了,由于接触的是物流行业,大部分时间接触的都是业务方面的内容,技术方面要求不是很高,渐渐的发现对某些知识都遗忘了,技术这东西不经常使用的话就会变得很生疏.所以,在工作之余觉得还是有必要去拾起那些快要被淡忘的知识.这篇文章主要是想把servlet中的相关知识结合源码去复习和加强一下,更进一步的分析和理解其中的细节东西和原理. 对于servlet这里不做过多的介绍了,简单介绍一下,servlet其实就是sun公司提供的一种动态web资源开发技术,它的本质还是和我们平时写的java程序差不