Pessoal estou com o seguinte problema, estou querendo gerar um pdf a partir de um relatorio do ireport. Entao o que esta acontecendo é que no servlet quando vou enviar os Bytes do arquivo de volta no response do servlet o outputstream esta fechado. e eu só posso escrever alguma coisa no outputstream se o mesmo estiver aberto. Qual o problema o que posso fazer para resolver esse problema? pq o outputstream esta fechado quando era pra estar aberto? Abaixo esta o codigo do meu servlet
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;
/**
*
* @author victorsilva
*
*/
public class PdfDebitoCadastradoServlet extends HttpServlet{
private Connection con;
public PdfDebitoCadastradoServlet(){
//
}
private Connection getConnection() throws ClassNotFoundException,
SQLException {
if (con == null) {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@//desenv-01.sefaz.al:1521/desenv";
String user = "admdeb001";
String password = "admdeb001";
Class.forName(driver);
con = DriverManager.getConnection(url, user, password);
}
return con;
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doPost(req, resp);
String nomeRelatorio = "debitoCadastrado.jasper";
String caminho = getServletContext().getRealPath("/")+"WEB-INF\\jasper\\";
try{
Map parametros = new HashMap();
parametros.put("seq_debito", 1);
parametros.put("REPORT_CONNECTION", getConnection());
JasperPrint impressao = JasperFillManager.fillReport(caminho + nomeRelatorio, parametros);
resp.setContentType("application/pdf");
byte[] bytes = JasperExportManager.exportReportToPdf(impressao);
if (bytes != null && bytes.length > 0) {
resp.setContentLength(bytes.length);
ServletOutputStream ouputStream = resp.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
}
JasperViewer.viewReport(impressao,false);
}catch (Exception e) {
e.printStackTrace();
throw new ServletException("Ocorreu um erro gerando o relatório do débito cadastrado");
}
}
}