【问题标题】:Open pdf file from jsp page从jsp页面打开pdf文件
【发布时间】:2011-04-04 15:52:07
【问题描述】:

我正在尝试在 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 - 响应已经提交/OutputStream 已经获得

【问题讨论】:

    标签: jsp servlets


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2023-03-19
        • 1970-01-01
        • 2014-06-30
        • 2012-08-28
        • 1970-01-01
        • 1970-01-01
        • 2010-12-30
        • 2023-04-01
        • 2023-03-24
        相关资源
        最近更新 更多