iReport4.6+Tomcat+JavaBean数据源报表1

来源:互联网 发布:江宁广电网络 编辑:程序博客网 时间:2024/06/09 21:00

BOOS让用JasperReports做报表,只能老老实实请教度娘了,但是网上资源又多又乱,多是copy的,代码都不知道有没有验证过、、、

自己做了一遍,贴出来供大家学习.

首先要确定你的tomcat、JDK、iReport是配置好的,下面我们开始,我用的事Myeclipse开发网站

一个很常见的例子

一、定义bean

ProductBean.java

package test6;public class ProductBean{    private String productName;    public String getProductName()    {        return productName;    }    public void setProductName(String productName)    {        this.productName = productName;    }}
二、在iReport中设定数据源及创建报表

1、首先把路径添加上去,就是你编译好的class文件的路径:iReport、工具--选项--路径(classpath)添加我的路径是最下面的那个,就是编译好的class文件路径

2、在工具栏找到ReportDataSources工具,添加数据源:点击新建、之后选择JavaBeans set datasource

选中之后会出现如下界面:


需要填写的包括Name、Factory class和static method,这个地方要注意,如果你已经编写好了数据制造工厂,就是说不基于网络来做,那么

你要填写Factory class这一栏,路径为:package.XXXXX,其中XXXX是你自己创建的工厂类的名字;同时在static method,,里面填写你创建的函数,即返回的list列表。

这种方式,下次有时间我再写出来,今天说基于网络的。

基于网络的那么就不用填写下面两项,只要把名字写一下好了,比如我的是

新建一个报表,一路next下去创建好之后,在界面上很容易找到添加数据的一个按钮:选择第二个选项,JavaBean Datasource

我新建的包是test6所以输入的classname就是test6.ProductBean

点击右边Read attributes就会出现一个class一个productName,当然,后面就是我们之前新建的一个属性,添加都会的吧

添加之后在我们的报表左边栏Fields里面看到了,将它拖入到编辑面板,要拖入到Details里面,这个我就不多说了,不懂看文档

之后是这样效果:

保存编译,之后找到你创建报表的路径,里面会有编译好的文件,我的文件名是repor_tservlet,所以生成两个

我们这次使用上面那个.jasper文件,当然下面的也是可以使用的,只是代码不同,如果又人需要留言好了,下面将report_servlet.jasper拷贝到你的服务器文件夹下,随便新建个文件夹就行

我新建了一个jasper文件夹,

下面编写我们的Servlet程序:BeanReportServlet.java

package test6;import java.io.File;import java.io.IOException;import java.io.OutputStream;import java.net.URLEncoder;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import net.sf.jasperreports.engine.JRDataSource;import net.sf.jasperreports.engine.JRExporterParameter;import net.sf.jasperreports.engine.JasperFillManager;import net.sf.jasperreports.engine.JasperPrint;import net.sf.jasperreports.engine.JasperReport;import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;import net.sf.jasperreports.engine.export.JRPdfExporter;import net.sf.jasperreports.engine.util.JRLoader;import net.sf.jasperreports.j2ee.servlets.BaseHttpServlet;public class BeanReportServlet extends HttpServlet{    private static final long serialVersionUID = 348226870594216833L;    @Override    protected void doGet(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException    {        this.doPost(req, resp);    }    @Override    protected void doPost(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException    {        try        {            //生成测试数据            ArrayList<ProductBean> data = new ArrayList<ProductBean>();            for(int i = 1; i <= 100; i++)            {                ProductBean bean = new ProductBean();                bean.setProductName("Product " + i);                data.add(bean);            }            JRDataSource dataSource = new JRBeanCollectionDataSource(data);                        //获取报表模板文件            String root_path = this.getServletContext().getRealPath("/");            root_path = root_path.replaceAll("\\\\", "/");            String reportFilePath = root_path + "jasper/report_servlet.jasper";            System.out.println("jasper file is " + reportFilePath);         //  File   reportFile   =   new   File(reportFilePath);             //生成JasperPrint            JasperReport report = (JasperReport)JRLoader.loadObject(reportFilePath);           // JasperReport report = (JasperReport)JRLoader.loadObject(reportFile);            JasperPrint jasperPrint = JasperFillManager.fillReport(report, null, dataSource);            //设定输出格式            OutputStream ouputStream = resp.getOutputStream();              resp.setContentType("application/pdf");            resp.setCharacterEncoding("UTF-8");              resp.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode("PDF报表", "UTF-8") + ".pdf\"");                                  // 使用JRPdfExproter导出器导出pdf              JRPdfExporter exporter = new JRPdfExporter();              // 设置JasperPrintList              exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);              exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, ouputStream);              exporter.exportReport();                        ouputStream.close();          } catch (Exception e)        {            e.printStackTrace();        }        }}
这个代码是我从其他网友那边拷贝来的,当然问题很多、不能用,我修改之后的这个应该是没问题的,至少在我的电脑环境下是可以用的。

新建之后要注意一些Jar包的引入,因为我也是初学,所以才用最笨的方法,就是将D:\Program Files\Jaspersoft\iReport-4.6.0\ireport\modules下面的所有的jar包全部放到WEB-INF的lib下面

这样肯定是没什么问题了,把一些必要的jar包引入你的代码

注意:

如果你是从其他地方拷贝来的代码,注意以下几点

 root_path = root_path.replaceAll("\\\\", "/");
很多博客写的不规范,就是不能用,上面这种写法是正确的一种,给个参考:http://www.blogjava.net/hefang/articles/324456.html

JasperReport report = (JasperReport)JRLoader.loadObject(reportFilePath);
这一行可能会报错,说loadObject什么已经过期,我郁闷了好久,最后是把所有的jar包拷贝到WEB-INF的lib下面解决的,具体还有待研究

 String root_path = this.getServletContext().getRealPath("/");            root_path = root_path.replaceAll("\\\\", "/");            String reportFilePath = root_path + "jasper/report_servlet.jasper";

注意路径修改成你的路径

上面做好之后,记得在web.xml里面配置

<pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><servlet>  <servlet-name>report</servlet-name>  <servlet-class>test6.BeanReportServlet</servlet-class>  </servlet>  <servlet-mapping>  <servlet-name>report</servlet-name>  <url-pattern>/report</url-pattern>  </servlet-mapping>  <display-name></display-name>  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list></web-app>

基本上是没什么问题了吧,如果我还没有遗漏的话、、、

运行Tomcat在浏览器里面输入:http://localhost:8080/Jb_test6/report

report是在xml里面的映射名,不用解释吧

<img src="http://img.blog.csdn.net/20140829132926115?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb211emkwODAy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" height="452" width="666" alt="" />看到最下面的提示了吧,那说明我们的运行成功了,点击打开看到我们生成的100个产品了吧<img src="http://img.blog.csdn.net/20140829133041104?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb211emkwODAy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />好的,GameOver如果有哪位还有问题可以留言,需要原代码的也留言
第一次认真的写博客,蛋蛋的忧伤




0 0
原创粉丝点击