【问题标题】:servlet to display a pdf file using by overriding doPost() [duplicate]通过覆盖 doPost() 来显示 pdf 文件的 servlet [重复]
【发布时间】:2013-09-25 09:16:13
【问题描述】:

我想要一个接收 pdf 文件并显示它的 Web 应用程序,但我收到了 http 500 错误。我认为它正在从请求中提取字节数组并将其添加到响应输出流中。那么我哪里错了?

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    response.getOutputStream().write(request.getParameter("f").getBytes());
    response.getOutputStream().flush();
    response.getOutputStream().close();
}

这里是html页面

<body>
<form action="display" method="post" enctype="multipart/form-data">
PDF FILE : <input type="file" name="f">
<input type="submit" value="display">
</form>
</body>

这是我得到的错误

java.lang.NullPointerException
    display.doPost(display.java:43)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722

【问题讨论】:

  • 使用 Apache commons-fileupload 。

标签: java servlets pdf


【解决方案1】:

您应该从多部分请求中获得有效部分。您可以使用 Apache Commons FileUpload,或使用 Servlets 3.0 Spec:

Part filePart = request.getPart("f"); // Retrieves <input type="file" name="f">
InputStream filecontent = filePart.getInputStream();
// ... read input stream

【讨论】:

    【解决方案2】:

    你想发送一个PDF文件到浏览器,你应该在outputStream写流之前写一个response.setContentType("application/pdf")

    【讨论】:

    • 是的,但我得到了一个空指针异常......你认为这会发生因为我设置了内容类型吗?
    【解决方案3】:

    确保只调用一次response.getOutputStream()

    OutputStream os = response.getOutputStream();
    os.write(bytes);
    os.flush();
    os.close();
    

    上传的文件不包含在请求参数中。这就是代码中 NullPointerException 的原因。您必须通过请求的输入流获取 pdf 内容。为此目的使用第三方库或 Servlet 3 规范。

    如果您想设置 http 标头(即针对内容类型),您应该在通过response.setHeader() 将任何字节写入OutputStream 之前设置它们。

    【讨论】:

      猜你喜欢
      • 2013-12-16
      • 1970-01-01
      • 2020-05-15
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      • 2017-04-19
      • 2012-06-19
      • 2019-01-07
      相关资源
      最近更新 更多