2012-01-14 43 views
2

我正在開發一個簡單的Web應用程序,客戶端應該能夠通過單擊HTML頁面中的超鏈接來下載PDF文件。我正在使用MVC pattern.Below是我的Servlet代碼:下載servlet的doGet()拋出NullPointerException

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    response.setContentType("application/pdf"); 
    ServletContext ctx = getServletContext(); 
    InputStream is = ctx.getResourceAsStream("/abc.pdf"); 

    int read = 0; 
    byte [] bytes = new byte[1024]; 

    OutputStream os = response.getOutputStream(); 
    while((read = is.read(bytes)) != -1) 
    { 
     os.write(bytes, 0, read); 
    } 
    os.flush(); 
    os.close(); 
} 

我使用的Apache Tomcat 6.0

下面是我收到的錯誤:

SEVERE: Servlet.service() for servlet download threw exception 
java.lang.NullPointerException 
    at BookDownloaderServlet.doGet(BookDownloaderServlet.java:41) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 

abc.pdf被正確放置在應用程序狀態下。仍然無法找到這個例外的原因。 和藹可親。 由於事先

+1

這將有助於如果你能告訴我們這行的代碼段是41到準確定位的NPE出現在哪裏。 – phineas 2012-01-14 08:20:48

回答

1

最有可能這條線是你的問題:

InputStream is = ctx.getResourceAsStream("/abc.pdf"); 

is被分配到null。在這裏拋出異常:

is.read(bytes) 

看起來abc.pdf文件不放在CLASSPATH的根目錄中。

+1

在webcontents中放置abc.pdf解決了我的問題..我使用Eclipse Indigo,因此我之前將abc.pdf準確地放在我的項目名稱下...我認爲沒有必要將該文件保存在classpath中..感謝線索 – 2012-01-17 08:58:04

0

嘗試改變到InputStream is = ctx.getResourceAsStream("abc.pdf");

刪除/

相關問題