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

时间:2013-09-25 09:16:14

标签: java servlets pdf

我想要接收pdf文件并显示它的网络应用程序,但我得到了一个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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

请务必仅拨打response.getOutputStream()一次:

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

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

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