Открыть PDF-файл со страницы JSP - PullRequest
0 голосов
/ 27 августа 2010

Я пытаюсь открыть PDF-файл, используя ServletOutputStream в 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

Ответы [ 2 ]

3 голосов
/ 27 августа 2010

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

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

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

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

0 голосов
/ 15 мая 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...