Boa tarde povo!
Seguinte, tenho um problema um pouco complicado em relação a downloads em jsp…
Estou trabalhando com 2 sistemas, um com um pocketPc, e outro um sistema web.
Utilizo o Linux (ou seja, sem activeSync), e o sistema do pocketPc precisa de um arquivo gerado pelo sistema web.
Até ai tudo bem.
Toda vez que um usuário utiliza o sistema, o mesmo gera um arquivo pra ele por no pocket. Um arquivo diferente para cada consulta. Então eu acredito que não posso colocá-lo no servidor e indicar a url (vários usuários, mesmo nome de arquivo,sabe como é…).
Então, segundo os patterns da empresa (MVC), na Action crio um arquivo, e escrevo nele utilizando o seguinte código:
try {
byte[] zipFile = (byte[])request.getSession().getAttribute("zipFile");
if(zipFile != null){
response.setHeader("Content-disposition", "attachment;filename="+request.getSession().getAttribute("nomeArq")+".zip");
response.setContentType("application/zip");
response.setContentLength(zipFile.length);
}
ServletOutputStream outPutStream = response.getOutputStream();
outPutStream.write(zipFile, 0, zipFile.length);
outPutStream.flush();
outPutStream.close();
}catch (IllegalStateException ie){
throw new ApplicationException("mensagem.padrao");
}catch (Exception e) {
throw new ApplicationException("mensagem.padrao");
}
//Removendo da sessao
request.getSession().removeAttribute("zipFile");
request.getSession().removeAttribute("nomeArq");
Apesar de não entender muito como funcionou, o sistema realiza a operação que quero, e o download aparece. Entretanto, o sistema lança um erro:
13:11:29,818 INFO [STDOUT] 13:11:29,816 ERROR [[jsp]] Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response
Procurando pela internet, achei coisas do tipo “você deve fazer este tipo de coisa no servlet” “servlet puro” e afins. Porém, não tenho esta escolha, tenho que fazer na Action :sad: . Alguém sabe como posso contornar este problema?