首页 > jasperreport > JasperReport教程 第5课 在浏览器上展现报表

JasperReport教程 第5课 在浏览器上展现报表

在前面的学习中,我们已经能够通过java程序来展现报表了。广大的java web开发人员,可能更想知道如果在浏览器中展现报表内容。下面的简单事例,能帮你达到这个要求。

本系列教程,前面使用的都是j2se的知识,没有涉及到java web方面的知识,现在开始加入web开发功能!

1、下载tomcat
下载地址http://apache.etoak.com/tomcat/tomcat-6/v6.0.20/bin/apache-tomcat-6.0.20.zip
(如果下载链接失效,到此处寻找最新的下载地址http://tomcat.apache.org/index.html)
下载完毕,解压即可

2 、给eclipse 添加WTP功能
WTP 是Web Tools Platform的缩写
WTP为eclipes增加了开发web和javaee程序的功能
想详细了解WTP的朋友,参见这里http://www.eclipse.org/webtools/

使用eclipse的安装新插件功能,详情可看这里
http://www.vogella.de/articles/Eclipse/article.html#updatemanager

首先,在eclips最上面的菜单中,选择 Help-> Install New Software

5_1

5_1

注意要选择Galileo – http://download.eclipse.org/releases/galileo
然后选择最下面的 wet,xml,and j2ee development

5_2

5_2

然后点击next…..一步一步完成即可
然后等待下载
下载完成后,会提示你重新启动eclipse,重启eclipse
至此,wtp安装完成
3、配置WTP
选择 Windows -> Preferences -> Server -> Runtime Environments. 单击 Add.

5_3

5_3

选择你的tomcat版本,我刚下载的tomcat版本是6

5_4

5_4

然后下一步,选择你刚才安装的tomcat根目录,选择你的jdk

5_5

5_5

点击 Finish按钮、点击OK.现在tomcat已经和WTP结合起来了。
4、新建web项目
之前的j2se项目不再使用,咱们此时创建一个新的web项目(感谢wtp ^_^)

选择 File -> New -> Other -> Web -> Dynamic Web Project.

5_6

5_6


录入项目名称 www.ddgrow.com.jasperreport
5_7

5_7


点击 finish. 点击 yes.打开了javaEE视图

5、添加jasperreport及其依赖包
将 jasperreport解压后目录中 lib下所有的jar包及 dist下的jasperreports-3.6.0.jar拷贝到lib目录下
6、将第一个项目中的src下的所有文件拷贝到新项目的src目录下,并且将jr1.jasper文件也拷贝过来
然后新建一个servlet(创建的时候,选择创建servlet,好处是能自己在web.xml中生成配置信息)
ddgrow.com.jasperreport.servelt.JS1

注意:由于我们的jr1.jrxml中包含了中文,如果不设置字体及编码,则中文无法显示,为了解决这个问题,我们需要修改jr1.jrxml,修改完毕后,需要重新编译为jasper文件。我们修改后的jr1.jrxml文件为

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports 
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" 
name="JR1" >
	<detail>
	<band height="200">
	<staticText>
	<reportElement x="0" y="0" width="200" height="20" />
	<textElement>
	<font pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H"/>
	</textElement>				
	<text><![CDATA[www.ddgrow.com 天天成长的博客 教程]]></text>
	</staticText>			
	</band>
	</detail>
</jasperReport>

细心的读者可能看出来哪些地方修改了。
我们是添加了如下代码

<textElement>
	<font pdfFontName="STSong-Light" pdfEncoding="UniGB-UCS2-H"/>
	</textElement>

我解决这个中文无法显示的问题,也是从网络上查到,感谢这个博客的作者http://blog.sina.com.cn/s/blog_4b0e11bc0100e3l2.html

当然,你需要一个PDF的中文语言包 iTextAsian.jar
要了解更多请看这里http://itextpdf.sourceforge.net/

package ddgrow.com.jasperreport.servlet;
 
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
 
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.JREmptyDataSource;
import net.sf.jasperreports.engine.JasperRunManager;
 
/**
 * @author www.ddgrow.com 天天成长的博客 2009-10-26
 */
public class JR1 extends HttpServlet {
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// 获取输出流
		ServletOutputStream servletOutputStream = response.getOutputStream();
		// 获取已编译的模板文件
		InputStream reportStream = this.getClass().getClassLoader()
				.getResourceAsStream("ddgrow/com/jasperreport/JR1.jasper");
		try {
			// 生成报表并将报表流写到输出流中,根据方法名也明白是输出为pdf格式
			JasperRunManager
					.runReportToPdfStream(reportStream, servletOutputStream,
							new HashMap(), new JREmptyDataSource());
			// 设置输出类型为pdf
			response.setContentType("application/pdf");
			servletOutputStream.flush();
			servletOutputStream.close();
		} catch (Exception e) {
			// 在浏览器上显示错误堆栈
			StringWriter stringWriter = new StringWriter();
			PrintWriter printWriter = new PrintWriter(stringWriter);
			e.printStackTrace(printWriter);
			response.setContentType("text/plain");
			response.getOutputStream().print(stringWriter.toString());
		}
	}
}

如果你的eclipse没有在web.xml中生成配置信息,你需要手动添加如下内容

  <servlet>
    <description></description>
    <display-name>JR1</display-name>
    <servlet-name>JR1</servlet-name>
    <servlet-class>ddgrow.com.jasperreport.servlet.JR1</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>JR1</servlet-name>
    <url-pattern>/JR1</url-pattern>
  </servlet-mapping>

7、发布
右键单击项目,export->web->WAR file->next 然后选择 location 为tomcat的webapps 目录,然后启动tomcat
在地址中录入 http://localhost:8089/www.ddgrow.com.jasperreport/JR1
(我把tomcat的端口从8080修改成了8089,如果你没有改,默认的应该是8080也就是

http://localhost:8080/www.ddgrow.com.jasperreport/JR1)

则显示结果为
5_10

后记:本人也是第一次使用WTP,感觉还是没有myeclipse方便好用,因此推荐大家使用myeclipse开发吧,相信环境如何搭建,通过myeclipse会更加容易的,特别是创建web项目。
至此,我相信朋友们对如何搭建开发环境都很清楚了。不管是eclipse还是myeclipse。后续的教程,我可能会使用myeclipse开发,但是不再介绍环境搭建的细节了,那样太浪费时间,呵呵,而且也显得重复了。
关于jasperreport的教程,我会一直往下写的。
然后就是写ireport的教程了。大家的关注是我写文章的动力!刚开始看的人肯定少,不过我相信以后读者会多的,因为目前我在google上搜索”jasperreport教程”,我的网站能排在第一页了。

  1. 2009年10月30日16:11 | #1

    Absolutely with you it agree. I like this idea, I completely with you agree.
    Nicolas

  2. yyb_gz
    2010年3月30日17:07 | #2

    我正想找些介绍如何用jasperreport,很感谢你

  1. 2009年10月28日22:06 | #1