[Resolvido/contribuição] Relatorio em Aplicação Web

3 respostas
alexfe

Pessoal cheguei na parte do relatórios em minha primeira aplicação Web, e estou apanhando tenho duvidas como:
Qual pasta correta devo colocar os arquivos de relatorios compilados ??
Qual o caminho correto para chama-los ??
Devo chama-lo por um Servelts ??
A imagem abaixo demonsta a extrutura do projeto, qual é a pasta correta para se colocar os arquivos de relatorios ?


projeto em jboss seam.

3 Respostas

LPJava

isso é bem relativo,pq depende do tipo de relatorio, vc pode gerar ela para uma pasta /admin/report pq sao reports que só adm pode ter acesso, uma vez que vc terá regras de segurança de acesso na sua app, se colocar na raiz da webcontent,todos podem ter acesso, imagine o diretor da empresa gerar um relatorio, onde tem la o lucro da empresa, o salario dos presidentes etc. e isso ficasse disponivel para todos que soubesse o path. complicado ne?

alexfe

Preciso de ajuda, coloque os arquivos de relatorios na pasta WebContent/relatorios
mas da erro de que o arquivo nao foi encontrado

não estou conseguindo passar o caminho certo

alexfe

Pessoa ai vai uma solução para quem está começando com relatórios em Aplicações web Igual a mim.
Sempre fiz relatórios em aplicações Desktop, sem problemas.
Agora comecei a desenvolver em JEE.
Muitos problemas com relatóios, varias soluções testadas, pesquisas em livros, google e fórum.
Depois de uma semana finalmente consegui exibir relatorio em PDF através do navegador.
Ai vai o código para quem está precisando.

package servlets;

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;

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.JRException;
import net.sf.jasperreports.engine.JasperRunManager;
import classes.ConnectionJDBC;

public class ComprovanteVenda extends HttpServlet {
	private static final long serialVersionUID = 1L;
	 protected void processRequest(HttpServletRequest request, HttpServletResponse response)
	    throws ServletException, IOException, SQLException, ClassNotFoundException {
		   try{
			   
			   ServletOutputStream servletOutuputStream  = response.getOutputStream();
			   String caminho = "/relatorio/ReVendaRapida.jasper";// caminho dentro do WebContent
			   InputStream reportStream = getServletConfig().getServletContext().getResourceAsStream(caminho);
			   
			   new ConnectionJDBC();
			     Connection conn = ConnectionJDBC.getconexao();//Conexão 
			     
			     Long codigo = Long.parseLong(request.getParameter("codigo"));//código ou Pk do objeto vinda por requisição
			     HashMap<String, Long> parameterMap = new HashMap<String, Long>();
			     parameterMap.put("PAR_PEDIDO",codigo);//parametros
			     
			     JasperRunManager.runReportToPdfStream(reportStream, servletOutuputStream, parameterMap, conn);//exporta para o browser em PDF
			     response.setContentType("application/pdf");
			     servletOutuputStream.flush();
			     servletOutuputStream.close();
			     conn.close();
			     
		   }catch(JRException e){  
			     StringWriter stringWriter = new  StringWriter();
			     PrintWriter printWriter = new PrintWriter(stringWriter);
			     e.printStackTrace(printWriter);
			     response.setContentType("text/plain");
			     response.getOutputStream().print(stringWriter.toString());
		   }catch(Exception e){
			   e.printStackTrace();
		   }          
	}	
    public ComprovanteVenda() {
        super();     
    }
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		try {
			processRequest(request, response);
		} catch (Exception e) {			
			e.printStackTrace();			 
		}			
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		try {
			processRequest(request, response);
		} catch (Exception e) {			
			e.printStackTrace();
		}		
	}

}
Criado 25 de fevereiro de 2011
Ultima resposta 1 de mar. de 2011
Respostas 3
Participantes 2