2010-08-27 4 views
0

Я пытаюсь открыть pdf-файл, используя ServletOutputStream в JSP. Код:Открыть pdf-файл с страницы jsp

response.setContentLength(statementVO.getOutputStream().size()); 
response.setContentType("application/pdf"); 
response.setHeader("Expires", "0"); 
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0"); 
response.setHeader("Pragma", "public"); 
ServletOutputStream out = response.getOutputStream(); 
out.write(statementVO.getOutputStream().toByteArray()); 
out.flush(); 
out.close(); 

Я получаю следующее сообщение об ошибке

WAS 6.0 - Response already committed/OutputStream already obtained

ответ

3

Вы получаете эту ошибку, потому что вы используете файл JSP вместо класса Java, чтобы написать Java-код в. JSP-файл предназначен для подачи текста шаблона, такого как HTML/CSS/JS, и так далее. JSP неявно использует response.getWriter() для написания текста шаблона. Всякий раз, когда вы вызываете response.getOutputStream() внутри JSP, вы рискуете получить эту ошибку, потому что вы не можете открыть какWriter, так и OutputStream. Вы можете только открыть тот или другой, см. Также связанные javadocs.

Для решения этой проблемы есть в основном 2 решения:

  1. сделать это в реальном Java класса вместо файла JSP. Для этого лучше всего подходит класс Servlet. Вы можете найти here базовый пример.

  2. Удалить весь текст шаблона (включая пробелы и символы перевода строки!) Из JSP-файла, чтобы он не косвенно вызывал response.getWriter(). См. Также this answer для подробного объяснения.

+2

Обучение у вас BalusC :) –

0

Если вы хотите отправить PDF-файл в качестве ответа каждый раз, лучше использовать сервлет вместо jsp. Но если это условное состояние, вы должны отправить свой ответ условно! вы не можете написать ответ дважды.

Смежные вопросы