`

JasperReport + Servlet Web应用之:HTML显示报表内容

阅读更多

构造我们的JavaBean:(get,set方法省略,属性名称要与报表的字段名)

public class Person {
	private String person_Id;

	private String person_name;

	private String person_age;

	private String person_address;
}

 构造我们的Service层:

public class PersonService {
	public List<Person> getAllPerson() {
		List<Person> perList = new ArrayList<Person>();
		perList.add(new Person("101", "小博", "22", "湖北"));
		perList.add(new Person("102", "张三", "21", "湖南"));
		perList.add(new Person("103", "李四", "23", "江苏"));
		perList.add(new Person("104", "王五", "22", "上海"));
		perList.add(new Person("101", "小博", "22", "湖北"));
		return perList;
	}
}

 构造我们的Servlet:

public class JRHTMLServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		ServletContext context = this.getServletConfig().getServletContext();
		File jasperFile = new File(context.getRealPath("/jasper/preson.jasper"));
		Map<String, String> parameters = new HashMap<String, String>();
		parameters.put("year", "2009");
		parameters.put("unit_mc", "武汉XX科技有限公司");
		JasperPrint jasperPrint = null;
		response.setCharacterEncoding("utf-8");
		try {
			JasperReport jasperReport = (JasperReport) JRLoader
					.loadObject(jasperFile);
			List<Person> personList = new PersonService().getAllPerson();
			jasperPrint = JasperFillManager.fillReport(jasperReport, parameters,
					new JRBeanCollectionDataSource(personList));
		} catch (JRException e) {
			e.printStackTrace();
		}
		if(null != jasperPrint){
			JRHtmlExporter exporter = new JRHtmlExporter();
			request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,jasperPrint);
			exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
			exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, response.getWriter());
			exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,"image?image=");
			try {
				exporter.exportReport();
			} catch (JRException e) {
				e.printStackTrace();
			}
		}
	}
}

 web.xml配置:

<servlet>
		<servlet-name>JRHTMLServlet</servlet-name>
		<servlet-class>com.mengya.servlet.JRHTMLServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>JRHTMLServlet</servlet-name>
		<url-pattern>/JRHTMLServlet</url-pattern>
	</servlet-mapping>

 在web.xml还要配置JasperReport的自带的一个Serlvet,不然显示报表内空时样式不好看。

<!-- JasperReport包中自带的Servlet,用来做为HTML形式显示报表的时候报表的图片,要在这里配置上,图片在jasperReport包中 -->
	<servlet>
		<servlet-name>JasperReportImageServlet</servlet-name>
		<servlet-class>
			net.sf.jasperreports.j2ee.servlets.ImageServlet
		</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>JasperReportImageServlet</servlet-name>
		<url-pattern>/image</url-pattern>
	</servlet-mapping>

 这里的servlet路径要与上面我写的那个serlvet中的JRHtmlExporterParameter.IMAGES_URI值一样!

  页面调用:

<a href="JRHTMLServlet">Servlet中生成HTML</a>

 

不通过servlet直接通过jsp出生的方式如下:

<a href="jsp/viewer.jsp">JSP中生成报表显示</a>

 

viewer.jsp内空如下:

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ page import="com.mengya.JRDataSource.PersonDataSource " %>
<%@ page import="net.sf.jasperreports.engine.*" %>
<%@ page import="net.sf.jasperreports.engine.util.*" %>
<%@ page import="net.sf.jasperreports.engine.export.*" %>
<%@ page import="net.sf.jasperreports.j2ee.servlets.*" %>
<%@ page import="java.io.*" %>
<%@ page import="com.mengya.bean.Person" %>
<%@ page import="com.mengya.service.PersonService" %>
<%@ page import="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource" %>
<%
	JasperPrint jasperPrint = (JasperPrint)session.getAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE);
	if (request.getParameter("reload") != null || jasperPrint == null)
	{
		File reportFile = new File(application.getRealPath("/jasper/preson.jasper"));
		if (!reportFile.exists())
			throw new JRRuntimeException("File preson.jasper not found. The report design must be compiled first.");
		JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
		Map parameters = new HashMap();
		parameters.put("year", "2009");
		parameters.put("unit_mc", "武汉XX科技有限公司");
		List<Person> personList = new PersonService().getAllPerson();			
		jasperPrint = 
			JasperFillManager.fillReport(
				jasperReport, 
				parameters, 
				new JRBeanCollectionDataSource(personList)
				);
		session.setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
	}
	JRHtmlExporter exporter = new JRHtmlExporter();
	int pageIndex = 0;
	int lastPageIndex = 0;
	if (jasperPrint.getPages() != null)
	{
		lastPageIndex = jasperPrint.getPages().size() - 1;
	}
	String pageStr = request.getParameter("page");
	try
	{
		pageIndex = Integer.parseInt(pageStr);
	}
	catch(Exception e)
	{
	}
	if (pageIndex < 0)
	{
		pageIndex = 0;
	}
	if (pageIndex > lastPageIndex)
	{
		pageIndex = lastPageIndex;
	}
	StringBuffer sbuffer = new StringBuffer();
	exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
	exporter.setParameter(JRExporterParameter.OUTPUT_STRING_BUFFER, sbuffer);
	exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "../image?image=");
	exporter.setParameter(JRExporterParameter.PAGE_INDEX, new Integer(pageIndex));
	exporter.setParameter(JRHtmlExporterParameter.HTML_HEADER, "");
	exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, "");
	exporter.setParameter(JRHtmlExporterParameter.HTML_FOOTER, "");
	exporter.exportReport();
%>


<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<head>
  <style type="text/css">
    a {text-decoration: none}
  </style>
</head>
<body text="#000000" link="#000000" alink="#000000" vlink="#000000">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<tr>
  <td width="50%">&nbsp;</td>
  <td align="left">
    <hr size="1" color="#000000">
    <table width="100%" cellpadding="0" cellspacing="0" border="0">
      <tr>
        <td><a href="viewer.jsp?reload=true"><img src="../images/reload.GIF" border="0"></a></td>
        <td>&nbsp;&nbsp;&nbsp;</td>
		<%
			if (pageIndex > 0)
			{
		%>
        <td><a href="viewer.jsp?page=0"><img src="../images/first.GIF" border="0"></a></td>
        <td><a href="viewer.jsp?page=<%=pageIndex - 1%>"><img src="../images/previous.GIF" border="0"></a></td>
		<%
			}
			else
			{
		%>
        <td><img src="../images/first_grey.GIF" border="0"></td>
        <td><img src="../images/previous_grey.GIF" border="0"></td>
		<%
			}
			if (pageIndex < lastPageIndex)
			{
		%>
		        <td><a href="viewer.jsp?page=<%=pageIndex + 1%>"><img src="../images/next.GIF" border="0"></a></td>
		        <td><a href="viewer.jsp?page=<%=lastPageIndex%>"><img src="../images/last.GIF" border="0"></a></td>
		<%
			}
			else
			{
		%>
        <td><img src="../images/next_grey.GIF" border="0"></td>
        <td><img src="../images/last_grey.GIF" border="0"></td>
		<%
			}
		%>
        <td width="100%">&nbsp;</td>
      </tr>
    </table>
    <hr size="1" color="#000000">
  </td>
  <td width="50%">&nbsp;</td>
</tr>
<tr>
  <td width="50%">&nbsp;</td>
  <td align="center">
	<%=sbuffer.toString()%>
  </td>
  <td width="50%">&nbsp;</td>
</tr>
</table>
</body>
</html>

  

6
0
分享到:
评论

相关推荐

    JasperReport+Servlet Web应用之:打印

    标题"JasperReport+Servlet Web应用之:打印"表明这是一个关于如何在基于Servlet的Web应用程序中使用JasperReport进行报表打印的教程。JasperReport是一款强大的开源报表工具,它允许开发者创建复杂的报表并将其集成...

    JasperReport+Servlet Web应用之:打印预览

    **JasperReport与Servlet在Web应用中的打印预览** JasperReport是一款强大的开源报表工具,它允许开发者在Java应用程序、Web应用甚至独立的Java应用程序中创建复杂的报告。Servlet是Java Web开发中的一个重要组件,...

    JasperReport+iReport 报表工具详细开发手册

    在Web环境中显示JasperReport生成的报表通常有两种方法: 1. **直接嵌入到Web页面**:通过将报表以图片或HTML的形式直接嵌入到Web页面中实现。 2. **通过Servlet调用**:创建一个Servlet处理报表请求,动态生成报表...

    整合Struts2+JasperReport Web报表应用示例

    在"整合Struts2+JasperReport Web报表应用示例"中,我们将探讨如何将这两个框架结合起来,为Web应用提供动态数据可视化的能力。首先,我们需要理解Struts2的核心概念,如Action、Interceptor(拦截器)和Result。...

    JasperReport+IReport开发Java报表入门级教程.pdf

    #### 第三部分:使用 JasperReport 作为报表控件开发 Web 报表应用 在 Web 应用程序中集成 JasperReport,主要涉及以下几个步骤: 1. **部署**: 将 JasperReport 的 JAR 文件添加到 Web 应用程序的类路径中。 2. *...

    Jasperreport+ireport学习笔记(1).rar

    JasperReport是一款开源的报告生成库,它允许开发者创建复杂的、可定制的打印和Web报表。JasperReport支持多种数据源,包括数据库连接、CSV文件、XML数据等,可以生成PDF、HTML、Excel、CSV等多种格式的报表。其强大...

    iReport 和 Jasperreport整合开发web报表向导

    【iReport与Jasperreport整合开发Web报表向导】 iReport和Jasperreport是Java世界中广泛使用的报表设计工具和报表引擎,它们为开发者提供了强大的报表设计和展示能力。本教程将详细介绍如何利用这两个工具进行Web...

    jasperreport报表模板预览 applet与servlet通信

    标题中的“jasperreport报表模板预览 applet与servlet通信”涉及到的是Java开发中的一种常见应用场景,即使用JasperReports库创建报表,并通过Applet和Servlet进行交互以实现报表的预览。JasperReports是一个强大的...

    Jasperreport+ireport学习笔记1

    ### Jasperreport与iReport整合开发Web报表学习笔记 #### 一、环境配置 为了能够顺利地使用Jasperreport和iReport进行报表设计与开发,首先需要确保开发环境配置正确。 1. **Java JDK环境**: 确保已安装最新版的...

    iReport 和 Jasperreport整合开发web报表.rar

    在IT行业中,报表工具是数据分析和业务展示的重要组成部分。`iReport`和`JasperReport`是两个在Java领域广泛...通过学习和实践这个压缩包中的内容,你可以提升在Web报表开发方面的技能,更好地满足业务数据展示的需求。

    一个完整的jasperreport+myeclipse+struts2例子

    【jasperreport】 JasperReport是一个开源的...通过这个实例,你可以深入理解JasperReport、MyEclipse和Struts2的结合使用,提高你在企业级Web应用开发中的能力。记得在实践中不断尝试和探索,以便更好地掌握这些技术。

    springmvc+jasperreport解决了中文显示和国际化

    在Spring MVC中集成JasperReport,能够方便地在Web应用中展示复杂的数据报表,同时解决中文显示和国际化的问题,使得报表能够适应多语言环境。 在Spring MVC项目中集成JasperReport,首先需要在`pom.xml`文件中添加...

    JSP WEB 应用开发教程

    - **报表工具的使用**:介绍如何使用 Ireport 和 JasperReport 等报表工具来生成各种类型的报表,满足企业级应用的需求。 #### 六、团队协作与分层技术 - **团队开发**:通过分组开发的方式,培养学生的团队协作...

Global site tag (gtag.js) - Google Analytics