1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Relatorio em aplicaçao WEB .jsp

Olá pessoal, estou desenvolvendo uma aplicação web, porém tenho dificuldades em gerar relatórios. Já tinha os relatórios prontos, feitos pelo IReport(usava eles na aplicação desktop).

Segue método abaixo para abrir o relatório:

private void gerarRelatorio() throws IOException {
    try {

        ServletContext context = getServletContext();
        byte[] bytes = null;
        try {

            JasperReport relatorio = JasperCompileManager.compileReport(getClass().getResourceAsStream("/relatorios/atendimentos_do_dia.jasper"));

            // Mapeia campos de parametros para o relatorio, mesmo que nao existam
            Map parametros = new HashMap();
            // adiciona parametros
            Date dataHoje = new Date(); // Construtor define data do dia de hoje
            System.out.println(dataHoje);
            parametros.put("data_ini", dataHoje);

            // direciona a saída do relatório para um stream     
            bytes = JasperRunManager.runReportToPdf(relatorio, parametros);
        } catch (JRException e) {
            e.getMessage();
        }
        // envia o relatório em formato PDF para o browser     
        resposta.setContentType("application/pdf");

        resposta.setContentLength(bytes.length);
        ServletOutputStream ouputStream = resposta.getOutputStream();
        ouputStream.write(bytes, 0, bytes.length);
        ouputStream.flush();
        ouputStream.close();

    } catch (Exception erro) {
        PrintStream tela = new PrintStream(resposta.getOutputStream());
        tela.println("<HTML><BODY>");
        tela.println("<script>alert('Não foi possível gerar o relatório.'" + erro.getMessage() + ");history.back();</script>");
        tela.println("<BR><P>");
        tela.println("</HTML></BODY>");
        return;
    }
}

Me deparo com o seguinte erro:

type Exception report

message getWriter() has already been called for this response

description The server encountered an internal error that prevented it from fulfilling this request.

exception

java.lang.IllegalStateException: getWriter() has already been called for this response
    org.apache.catalina.connector.Response.getOutputStream(Response.java:544)
    org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFacade.java:195)
    javax.servlet.ServletResponseWrapper.getOutputStream(ServletResponseWrapper.java:100)
    controle.acoes.gerarRelatorio(acoes.java:607)
    controle.acoes.processRequest(acoes.java:115)
    controle.acoes.doGet(acoes.java:131)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

Meu processRequest do Servlet:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");

        requisicao = request;
        resposta = response;
        saida = response.getWriter();

        if (requisicao.getParameter("acao").equals("login")) {
            autenticar();
        } else if (requisicao.getParameter("acao").equals("menu")) {
            encaminharPagina("menu.jsp");
        } else if (requisicao.getParameter("acao").equals("logout")) {
            logout();
        } else if (requisicao.getParameter("acao").equals("cadCliente")) {
            salvarCliente();
        } else if (requisicao.getParameter("acao").equals("editCliente")) {
            editarCliente();
        } else if (requisicao.getParameter("acao").equals("deleteCliente")) {
            deletarCliente();
        } else if (requisicao.getParameter("acao").equals("pesquisarCliente")) {
            pesquisarCliente();
        } else if (requisicao.getParameter("acao").equals("cadAtendi")) {
            salvarAtendimento();
        } else if (requisicao.getParameter("acao").equals("editAtendi")) {
            editarAtendimento();
        } else if (requisicao.getParameter("acao").equals("deleteAtendi")) {
            deletarAtendimento();
        } else if (requisicao.getParameter("acao").equals("cadOS")) {
            salvarOS();
        } else if (requisicao.getParameter("acao").equals("editOS")) {
            editarOS();
        } else if (requisicao.getParameter("acao").equals("deleteOS")) {
            deletarOS();
        } else if (requisicao.getParameter("acao").equals("cadPagamento")) {
            salvarPagamento();
        } else if (requisicao.getParameter("acao").equals("editPagamento")) {
            editarPagamento();
        } else if (requisicao.getParameter("acao").equals("deletePagamento")) {
            deletarPagamento();
        } else if (requisicao.getParameter("acao").equals("gerarOS")) {
            gerarOS();
        } else if (requisicao.getParameter("acao").equals("gerarPagamento")) {
            gerarPagamento();
        } else if (requisicao.getParameter("acao").equals("gerarRelatorio")) {
            gerarRelatorio();
        }
}

Alguém tem alguma ideia em que estou errando?

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags ireport jasperreports jsp web servlets ou faça a sua própria pergunta.