Jasper + jsp + servlet

2 respostas
almarti

Amigos, bom dia. Estou tentando exibir um relatório feito iReport, mas não estou conseguindo. Meu iReport é o 2.0.4 e estou fazendo da seguinte maneiroa:

Utilizo os jars:
commons-beanutils.jar
commons-collections.jar
commons-digester.jar
commons-logging-api.jar
commons-logging.jar
blockrel\itext-1.02b.jar
jasperreports-0.6.1.jar
cmdline-1.0.2.jar
jcommon-0.9.6.jar
log4j-1.2.8.jar
mysql-connector-java-3.0.16-ga-bin.jar
servlet-api.jar
postgresql-8.3-603.jdbc3.jar

Minha classe é:

package com.reports;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperManager;
import net.sf.jasperreports.engine.JasperPrint;
public class Relatorio extends HttpServlet {
public static Connection con;


protected void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
conexao(); // Faz a conexão
// Na variavel pathJasper ficara o caminho do diretório para
// os relatórios compilados (.jasper)
String pathJasper = getServletContext().getRealPath(
"/WEB-INF/classes/com/reports")
+ "/";
// A variavel path armazena o caminho real para o contexto
// isso é util pois o seu web container pode estar instalado em lugares diferentes
String path = getServletContext().getRealPath("/");
// Parametros do relatorio
Map parametros = new HashMap();
// O único parametro que devemos passar é o PathRelAutores
// é o caminho pro RelAutores.jasper (que foi subtituido pelo
// valor fixo ?D:/iReport-0.4.0/RelAutores.jasper?)
parametros.put("CDLOJA", "46");
try {
// Aqui ele cria o relatório
//JasperPrint impressao = JasperFillManager.fillReport(pathJasper
//+ "inativos.jasper", parametros, con);

JasperPrint impressao = JasperFillManager.fillReport("C:\\relblock\\relblock\\build\\web\\WEB-INF\\classes\\com\\reports\\inativos.jasper", parametros, con);

// Grava o relatório em disco em pdf
JasperManager.printReportToPdfFile(impressao, path
+ "/inativos.pdf");
// Redireciona para o pdf gerado
res.sendRedirect("inativos.pdf");
} catch (Exception e) {
res.getWriter().println("Erro ao gerar o relatório: " + e);
}
}
// Cria a conexão
public void conexao() {
try {
if (con == null || con.isClosed()) {
Class.forName("org.postgresql.Driver");
con = DriverManager.getConnection(
    "jdbc:postgresql://52.31.152.59:5432/gestao_locadora","postgres","postgres"); 
}
} catch (Exception e) {
System.out.println("não foi possível conectar ao banco ->");
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
doPost(arg0, arg1);
}
}

e o mapeamento é:

<servlet> <servlet-name>RelatorioServlet</servlet-name> <servlet-class>com.reports.Relatorio</servlet-class> </servlet> <servlet-mapping> <servlet-name>RelatorioServlet</servlet-name> <url-pattern>/rel</url-pattern> </servlet-mapping>

Quando tento executar, ocorre o seguinte erro:

Erro ao gerar o relatório: net.sf.jasperreports.engine.JRException: Error loading object from file : C:\relblock\relblock\build\web\WEB-INF\classes\com\reports\inativos.jasper

Até acredito que o java não consegue compilar meu .jasper por questão de versão. Porém, se atualizo a versão, a linha
import net.sf.jasperreports.engine.JasperManager;
fica deprecation.

Alguem tem uma ideia, como exibir relatorios feito no iReport 2.0.4?

2 Respostas

almarti

Alguem?

almarti

Alguma outra opção de relatório?

Criado 8 de maio de 2008
Ultima resposta 9 de mai. de 2008
Respostas 2
Participantes 1