Gerar relatório em PDF com Servlet

Pessoal,

Estou com um problema, estou tentando fazer com que meu servlet exiba um relatório simples de exemplo em PDF.Porém minha dúvida é a seguinte,onde devo colocar o arquivo pré-compilado teste.jasper?

Pois dentro do meu codigo java,que é o Servlet eu preciso informar sua localização…

InputStream stream = getServletContext().getResourceAsStrem( :?: Localização :?: );

Pessoal obrigado desde já!!

oi, bem-vindo ao Portal Java… se tu colocar como “/arquivo.pdf” ele vai procurar na raiz da aplicação ou seja, no mesmo nível onde esta a pasta WEB-INF…

Obrigado :grin:

Então Matheus eu estou começando a estudar esse esquema,foi me passado uma tarefa na empresa de gerar relatórios com Servlet,e estou passando por problemas no estudo,pois sou novato aqui!

Bom, eu peguei um exemplo da java Magazine e tentei fazer uma adaptação simples e de cara surgiram dúvidas.Vou postar o código que utilizei no doGet() do meu Servlet…

private static final String urlBase = "";
private static final String pageRoot = "";

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
               
  try
     {

       InputStream stream = getServletContext().getResourceAsStream("/teste.jasper");
       JasperReport relatorio = JasperManager.loadReport(stream);
		    
       String arqTemp = request.getSession().getId()+".pdf";
		    
        JasperPrint impressao = JasperManager.fillReport(relatorio,new HashMap(),connection);
 JasperManager.printReportToPdfFile(impressao,pageRoot+urlBase+arqTemp);
		    
	 response.sendRedirect(urlBase+arqTemp);
        }catch(Exception e)
        {
           System.out.println("Erro");
        }
}

Bom o teste.jasper esta dentro de webRoot no Eclipse,no mesmo nivel de WEB-INF.Este relatório apresenta apenas campos estaticos,ou seja, eu apenas digitei palavras “teste” para poder testar a visualização.Mas o exemplo pede um objeto HashMap e um Connection,isso não me interessa agora!!Porém não sei quais métodos usar para substituir.

É obrigatório haver uma conexão com um BD para gerar relatórios??

As variáveis da class (private static final String urlBase = “”
private static final String pageRoot = “”),também não sei como configurar!

Gostaria de uma ajuda só para dar inicio aos meus estudos?Pois está meio confuso.

obs:
Eu passei alguns metodos com parametros inexistentes somente de forma ilustrativa,reconheço o erro,exemplo:

JasperPrint impressao = JasperManager.fillReport(relatorio,new HashMap(),Connection);

Obrigado

ta, calma, vamos por partes. hehehe, teu problema é em conectar ao banco ou mandar o pdf pro cliente? pra mandar pro cliente, é só tu setar o content type para “application/pdf” se não me engano… agora, se o relatório tem q ter acesso ao banco ou não tu q tem q saber, hehehe, afinal, de onde ele esta tirando esses dados para gerar o relatório??? :roll:

Bom,

Vou fazer o seguinte, eu vou por partes.Se eu quiser criar um relatório por um arquivo pré-compilado, no meu caso o teste.jasper.Eu preciso informar sua fonte de dados.Acho que dei um vacilo aí,hehehe

Agora se eu quiser visualizar um pdf já pronto?

ai é só tu dar um setContentType( “application/pdf” ), adquirir o outputstream do response, ler os bytes do PDF e salvar na stream

Obrigado Matheus!!Logo partirei para uma fase mais avançada!!!

Kra tentei fazer

try
		  { 
		    response.setContentType("application/pdf");
		    ServletOutputStream out = response.getOutputStream();
		    		  
                                  }catch(Exception e)
		  {
		  	System.out.println(e.toString());
		  }

Devo ler os Bytes do pdf e salvar em qual stream?

em out…