OutputStream em servlet esta fechado

0 respostas
lindberg713

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");
		}
		
	}

}
Criado 2 de junho de 2009
Respostas 0
Participantes 1