Ola Pessoal,Neste post, irei mostrar um exemplo de como fazer um simples relatorio em Java para aplicacoes web, para a geracao do relatorio usaremos o Jasper Reports que e um Framework open-source, para a criacao do layout usaremos o Framework iReport, para testarmos a aplicacao, criamos um Servlet, que sera executado no servidor JBoss4 usando o Eclipse.Para baixar o JasperReports: http://jasperforge.org/projects/jasperreportsPara baixar o iReport: http://jasperforge.org/projects/ireportAo final do post o projeto sera disponibilizado para download com todas bibliotecas usadas e os arquivos do relatorio.1. Passo: Estrutura do projeto:2. Passo: Vamos criar a estrutura do relatorio do iReport, crie um relatorio com o nome clientes, com o seguinte arquivo xml:<?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="clientes" language="groovy" pageWidth="612" pageHeight="792" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> <property name="ireport.zoom" value="1.0"/> <property name="ireport.x" value="0"/> <property name="ireport.y" value="0"/> <style name="efeitoZebra"> <conditionalStyle> <conditionExpression><![CDATA[new Boolean(($V{COLUMN_COUNT}.intValue() % 2) != 0)]]></conditionExpression> <style mode="Opaque" backcolor="#BAB8B8"/> </conditionalStyle> </style> <parameter name="clientesLista" class="java.util.List"/> <parameter name="titulo" class="java.lang.String"/> <parameter name="total" class="java.lang.String"/> <field name="nome" class="java.lang.String"/> <field name="endereco" class="java.lang.String"/> <field name="email" class="java.lang.String"/> <field name="cidade" class="java.lang.String"/> <background> <band splitType="Stretch"/> </background> <title> <band height="38" splitType="Stretch"> <textField> <reportElement x="109" y="0" width="349" height="35"/> <textElement lineSpacing="1_1_2"> <font size="20" isBold="true"/> </textElement> <textFieldExpression class="java.lang.String"><![CDATA[$P{titulo}]]></textFieldExpression> </textField> </band> </title> <pageHeader> <band height="17" splitType="Stretch"/> </pageHeader> <columnHeader> <band height="34" splitType="Stretch"> <staticText> <reportElement x="0" y="14" width="137" height="20" forecolor="#010101" backcolor="#3B56EC"/> <textElement> <font size="12" isBold="true" isItalic="true"/> </textElement> <text><![CDATA[Nome]]></text> </staticText> <staticText> <reportElement x="137" y="14" width="149" height="20" forecolor="#010101" backcolor="#3B56EC"/> <textElement> <font size="12" isBold="true" isItalic="true"/> </textElement> <text><![CDATA[Endereco]]></text> </staticText> <staticText> <reportElement x="286" y="14" width="153" height="20" forecolor="#010101" backcolor="#3B56EC"/> <textElement> <font size="12" isBold="true" isItalic="true"/> </textElement> <text><![CDATA[E-mail]]></text> </staticText> <staticText> <reportElement x="439" y="14" width="133" height="20" forecolor="#010101" backcolor="#3B56EC"/> <textElement> <font size="12" isBold="true" isItalic="true"/> </textElement> <text><![CDATA[Cidade]]></text> </staticText> </band> </columnHeader> <detail> <band height="22" splitType="Stretch"> <textField> <reportElement style="efeitoZebra" x="137" y="0" width="149" height="20"/> <textElement/> <textFieldExpression class="java.lang.String"><![CDATA[$F{endereco}]]></textFieldExpression> </textField> <textField> <reportElement style="efeitoZebra" x="439" y="0" width="133" height="20"/> <textElement/> <textFieldExpression class="java.lang.String"><![CDATA[$F{cidade}]]></textFieldExpression> </textField> <line> <reportElement x="0" y="20" width="572" height="1"/> </line> <textField> <reportElement style="efeitoZebra" x="0" y="0" width="137" height="20"/> <textElement/> <textFieldExpression class="java.lang.String"><![CDATA[$F{nome}]]></textFieldExpression> </textField> <textField> <reportElement style="efeitoZebra" x="286" y="0" width="153" height="20"/> <textElement/> <textFieldExpression class="java.lang.String"><![CDATA[$F{email}]]></textFieldExpression> </textField> </band> </detail> <columnFooter> <band height="20" splitType="Stretch"> <textField> <reportElement x="391" y="0" width="181" height="20"/> <textElement> <font size="12" isBold="true"/> </textElement> <textFieldExpression class="java.lang.String"><![CDATA[$P{total}]]></textFieldExpression> </textField> </band> </columnFooter> <pageFooter> <band height="54" splitType="Stretch"> <textField> <reportElement x="225" y="17" width="80" height="20"/> <textElement textAlignment="Right"/> <textFieldExpression class="java.lang.String"><![CDATA["Pagina "+$V{PAGE_NUMBER}+" de"]]></textFieldExpression> </textField> <textField evaluationTime="Report"> <reportElement x="305" y="17" width="40" height="20"/> <textElement/> <textFieldExpression class="java.lang.String"><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression> </textField> </band> </pageFooter> <summary> <band height="42" splitType="Stretch"/> </summary></jasperReport>clientes.jrxml3. Passo: Vamos criar um Servlet, chamado RelatorioServlet, o foco do post e mostrar como fazer relatorio em Java, para isto, deixarei toda logica no Servlet, deixando o projeto com uma baixa coesao, fique a vontade para fazer o projeto com a separacao das camadas. Crie tambem uma JavaBean chamado Cliente, para carregar as informacoes dos Clientes, criaremos um List de Clientes no proprio Servlet. O exemplo tera uma opcao que visualizara o Relatorio, usando o metodo estatico viewReport da Classe JasperViewer, a outra opcao sera o pdf do Relatorio usando o metodo estatico printReportToPdfFile da Classe JasperPrintManager.package modelo;public class Cliente { private String nome; private String endereco; private String email; private String cidade; public Cliente() { super(); } public Cliente(String nome, String endereco, String email, String cidade) { super(); this.nome