servlet 通过覆盖 doPost() 来显示 pdf 文件



我想要一个接受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,或与Servlets 3.0规范一起使用:

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

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

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

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

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

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

最新更新