从jsp页面打开pdf文件

时间:2010-08-27 06:48:58

标签: jsp servlets

我正在尝试使用JSP中的ServletOutputStream打开pdf文件。代码是:

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 个答案:

答案 0 :(得分:3)

您收到此错误是因为您正在使用JSP文件而不是Java类来编写Java代码.StM文件旨在提供模板文本,如HTML / CSS / JS等。 JSP隐式使用response.getWriter()来编写模板文本。每当您在JSP中调用response.getOutputStream()时,您都可能会收到此错误,因为您无法打开 WriterOutputStream。您只能打开其中一个,另请参阅链接的javadoc。

要解决这个问题,基本上有两种解决方案:

  1. 在真正的Java类而不是JSP文件中执行此操作。 Servlet类是最适合的地方。您可以找到here基本示例。

  2. 从JSP文件中删除所有模板文本(包括空格和换行符!),以便它不会隐式调用response.getWriter()。有关详细说明,另请参阅this answer

答案 1 :(得分:0)

如果你想每次发送pdf文件作为响应,最好使用servlet而不是jsp。但如果是条件状态,则必须以有条件的方式发送响应!你不能两次写回复。