Como gerar relatórios Ireport + JasperReport com JEE
No artigo de hoje, vou apresentar como gerar relatórios de uma base de dados em uma aplicação JEE. Em um artigo anterior mostrei como gerar relatórios usando Java↳Java42 conteúdosNovidades do Java 26 (para desenvolvedores)Dev (Back & Front) · mar 2026Visual Studio Code para Java: o guia completo (dicas, configuração e extensões)Dev (Back & Front) · out 2025Quarkus: Modernizando a linguagem Java para a era da nuvemDev (Back & Front) · nov 2020Ver tudo em Dev (Back & Front) → Básico com Hibernate. Aqui vamos manter a mesma estrutura técnica, a diferença é que este focará em JEE. Espero que gostem!
Requisitos
- <colocar o link do primeiro post com report>
Para gerar relatórios em ambiente JEE, há algumas mudanças a nível de código, porém tudo a respeito do Ireport com o baco de dados é mantido.
Passo 1:
Criar o layout no Ireport e fazer a conexão com o banco de dados↳Banco de dados134 conteúdosSQL ou NoSQL: eis a questão!!Data · mar 2020Banco de dados: como organizar e dar segurança para milhões de dados de loteriasData · mai 20215 serviços gratuitos na cloud para bancos de dados PostgresData · fev 2025Ver tudo em Data →. Definir, também, as colunas do relatório, para por fim, definir a estrutura do relatório;
Passo 2:
Criar a classe de conexão com banco de dados – o Hibernate
cria o bean;
Passo 3:
Criar um package exclusivo para o relatório e uma classe – por questao de organização, importar o jrxml para o projeto e para o package do relatóprio, por medida de segurança;
Passo 4:
Para que o arquivo seja gerado na pagina web, é preciso mudar algumas coisas no método responsável por gerar o relatório:
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
ServletOutputStream responseStream = response.getOutputStream();
InputStream caminho = getClass().getResourceAsStream("../relatorio/reportblog.jrxml");
response.setContentType("application/pdf");
- Criar um context e objetos de resposta;
- Fazer um stream do caminho onde está o jrxml. Quando temos dois pontos antes da barra, significa que temos um caminho diferente da classe que gera o relatório;
- Depois, um response que informe o tipo do conteúdo, para que o browser saiba qual aplicativo chamar – caso ele tenha suporte response.setContentType(“application/pdf”).
Na linha a seguir, informamos como será o nome do arquivo a ser gerado:
response.setHeader("Content-Disposition","attachment; filename=\"relatorio.pdf\"");
Abaixo, temos o padrão para invoção:
JasperReport pathReport = JasperCompileManager.compileReport(caminho);
//relatorio gerado
JasperPrint preencher = JasperFillManager.fillReport(pathReport, null,new JRBeanCollectionDataSource(listaUS));
JasperExportManager.exportReportToPdfStream(preencher,responseStream);
responseStream.flush();
responseStream.close();
context.renderResponse();
context.responseComplete();
O resultado
O resultado é que ao invés de ter um arquivo que é direcionado para um local, ele aparece no browser (Firefox, Chrome, ou IE) do usuário. E o browser decide como vai apresentar esse arquivo. Por exemplo, no Firefox, ele aprende o arquivo no proprio browser; no Internet Explorer ele abre uma janela na qual o usuário decide se vai abrir, ou fazer o download.
JasperViewer
O JasperViewer é uma forma de exibir o relatório em applet, ao invés de usar o browser; mas deve ser analizado o tempo de carregamento. Para isso, basta adiciona a linha abaixo:
JasperViewer.viewReport(preencher, false);
E desabilitar as linhas referentes ao browser, para que não sejam executadas em paralelo:
response.setContentType("application/pdf");
response.setHeader("Content-Disposition","attachment; filename=\"relatorio.pdf\"");
Fico por aqui, mas espero que tenham gostado do artigo.








Alex Hinckel
John Calistro
Airton Lira Junior
Luiz Fernando Duarte Junior





