Tenho uma servlet que gera o relatório do jasper e o navegador renderiza esses bytes.Porém agora além de renderizar esses bytes no navegador, posso pegar esses bytes para serem usados como anexo de um email.
Atualmente no servlet: conecto no banco de dados, gero o relatório em formato de bytes e renderizo no navegador
@SuppressWarnings("unchecked")
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
//no flex aonde chamar o relatório preciso passar o nome do relatório
String fileName = request.getParameter("nome_relatorio");
String title = request.getParameter("titulo_relatorio");
Logger logger = Logger.getLogger(JasperReportPDF.class);
// obtém a conexão com o banco de dados
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(
"jdbc:mysql://****************", // coloque o IP se não for usado localhost
"*****", // mude para o nome do usuário do seu bd
"*****"); // mude para a senha deste usuário
} catch (Exception e) {
System.out.println("Erro ao obter conexao via DriverManager: "
+ e.getMessage());
}
// gera o relatório
ServletContext context = getServletContext();
byte[] bytes = null;
try {
// carrega os arquivos jasper
JasperReport relatorioJasper = (JasperReport)JRLoader.loadObject(
context.getRealPath("/WEB-INF/relatorios/" + fileName));
// parâmetros, se houverem
HashMap parametros = new HashMap();
parametros.put("SUBREPORT_DIR", context.getRealPath("/WEB-INF/relatorios/"));
//parametros possíveis
if(request.getParameter("PED_CODIGO")!= null)
parametros.put("PED_CODIGO", new Integer(request.getParameter("PED_CODIGO")));
// direciona a saída do relatório para um stream
bytes = JasperRunManager.runReportToPdf(relatorioJasper,parametros,conn);
logger.info("Relatório Gerado");
} catch (JRException e) {
e.printStackTrace();
logger.error("Erro ao gerar relatório");
}
if (bytes != null && bytes.length > 0) {
// envia o relatório em formato PDF para o browser
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
response.setHeader("Content-disposition", "inline; filename=" + title + ".pdf"); //nome do arquivo pdf
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
}
}
Desculpem pela minha inexperiência, em servlets, mas como eu posso reaproveitar esses bytes do servlet em uma outra classe java responsável por mandar o email?Ou eu precisaria criar outra classe?
Editado:
Resolvido, criei classes especificas
