2013-09-25 114 views
-1

使用顯示PDF文件我想要一個PDF文件並顯示它的Web應用程序,但我得到了一個HTTP 500 error.i認爲它是從請求中提取字節數組和將其添加到響應輸出流。那麼我錯在哪裏?servlet通過覆蓋doPost()

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 
+0

爲它使用Apache commons-fileupload。 –

回答

2

你應該從你的多要求的有效部分的錯誤。你可以使用Apache共享文件上傳,或使用Servlet 3.0規範:

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

你想一個PDF文件發送到瀏覽器,你應該寫一outputStream以前response.setContentType("application/pdf")寫入流;

+0

是的,但我得到一個空指針異常...你認爲會發生,因爲我dint設置內容類型? – Alvin

0

確保調用response.getOutputStream()只有一次:

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

上傳的文件不包含作爲請求參數。這就是代碼中NullPointerException的原因。您必須通過請求的輸入流獲取pdf內容。爲此目的使用第三個pary庫或Servlet 3規範。

如果您想設置http標頭(即內容類型),則應在通過response.setHeader()將任何字節寫入OutputStream之前設置它們。