Problemas com diretórios

5 respostas
fredericoengels

Bom pessoal, eu criei um Service (RelatorioClienteService) com o seguinte método:

public JasperPrint gerarRelatorioClientePDF(String jasper)

Esse “jasper” é o caminho completo para se chegar em um arquivo .jasper. Criei uma classe de teste com um método main e fiz uma chamada pra esse método, e passei o seguinte caminho por parâmetro:

C:/Users/informatica/Documents/NetBeansProjects/ProjetoCRUDClientes/src/java/br/crud/relatorios/relatorioclientes.jasper

Funcionou tudo direitinho!

O grande problema é quando eu chamo esse método dentro de um servlet, por incrível que pareça, passando esse mesmo parâmetro, dá erro :confused:

Creio que seja algum problema na estrutura de diretórios da minha aplicação (Desculpem minha ignorância)

Segue abaixo o código do Servlet:

/* Esse servlet se encontra no diretório C:/Users/informatica/Documents/NetBeansProjects/ProjetoCRUDClientes/src/java/br/crud/controller/servlets/GerarRelatorioPDF.java */
public class GerarRelatorioPDF extends HttpServlet {

    @Override

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        try {
           Facade facade = Facade.getInstance();           
           /* Nessa linha aqui estou botando o caminho completo do arquivo .jasper */
           JasperPrint printer = facade.gerarRelatorioClientePDF("C:/Users/informatica/Documents/NetBeansProjects/ProjetoCRUDClientes/src/java/br/crud/relatorios/relatorioclientes.jasper");
           JasperViewer view = new JasperViewer(printer);
           view.setVisible(true);
           /* Onde será salvo esse pdf? */
           JasperExportManager.exportReportToPdfFile(printer, "clientes.pdf");
         }catch (Exception e) {
           out.println("Houve erro!");
       }

Alguém pode me dizer porque esse código não está funcionando? Não é a primeira vez que tenho esse problema (diretório funcionando no main, e dando pau dentro de um servlet)

5 Respostas

thiagocg

Fala fredericoengels, blz cara?

Seguinte, quando vc esta desenvolvendo uma aplicação web vc tem q ter em mente q a unica pasta que o seu aplicativo conseguirá acessar será a pasta WebContent.

Bom, tentando ser mais claro, vc tem q colocar qualquer recurso que sua aplicação vá precisar dentro da pasta WebContent, e isso serve para relatorios, imagens, css, js.

Pra resolver seu problema o melhor seria vc criar uma pasta relatorios dentro do seu WebContent e chamar de dentro do seu servlet passando o caminho para o arquivo como relatorios/seurelatorio.jasper

Bons estudos!

[]'s

Elizeu_Santos

apostila FJ21 da caelum fala um pouco sobre a estrutura de um projeto WEB.

fredericoengels

@thiagocg:

Valeu cara, fiz isso que você disse, criei uma pasta chamada [color=orange]relatorios[/color] dentro da pasta Web-content. E na chamada do método botei:

JasperPrint printer = facade.gerarRelatorioClientePDF("/relatorios/relatorioclientes.jasper");
JasperViewer view = new JasperViewer(printer);
view.setTitle("teste");
view.setVisible(true);

Ta até abrindo a view, com o título que eu coloquei. Porém, o conteúdo do relatório não é exibido, fica tudo em branco. É como se não tivesse encontrado o relatório

:frowning:

thiagocg

fredericoengels, o jasperViewer q vc ta chamando pra mostrar o relatorio só serve para aplicações desktop, vc tem que passar o seu relatorio para ser baixado ou abri-lo diretamente em uma nova aba/janela.

Da uma pesquisada nisso, não tenho nenhum exemplo aqui p/ servlet para te passar.

[]'s

fredericoengels

Pois é , usei o JasperView só pra testar o JasperPrint mesmo.

Porque quando exporto pra pdf, da erro
Ou seja, problemas com diretórios novamente :confused:

Testei em um main, ele exporta pra pdf normal, mas no Servlet não. Fiz isso que você disse, de jogar os relatórios no Web-Content, mas não funcionou.

Mas valeu ;D
Vou dar uma olhada aqui pra ve se resolvo isso.

Criado 24 de fevereiro de 2011
Ultima resposta 25 de fev. de 2011
Respostas 5
Participantes 3