2011-02-28 48 views
0

美好的一天!WEB-INF中的JPEG文件通過ServletContext返回爲null#getResource()

我試圖輸出使用下面的代碼包含在Web應用程序的 用戶JPG文件:

public class JpegOutput extends HttpServlet { 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

     byte bufferArray[] = new byte[1024]; 
     ServletContext ctxt = getServletContext(); 

     response.setContentType("image/jpeg"); 
     ServletOutputStream os = response.getOutputStream(); 
     InputStream is = ctxt.getResource("/WEB-INF/image/image1.jpg").openStream(); 
     int read = is.read(bufferArray); 
     while (read != 1) { 
      os.write(bufferArray); 
      read = is.read(bufferArray); 
     } 
     is.close(); 
     os.close(); 
    } 
} 

但出現錯誤:

HTTP Status 500 - 
exception java.lang.NullPointerException 

我不知道,如果它無法讀取源圖像或其他東西。無論如何,我把圖像放在這個文件夾內/WEB-INF/image/image1.jpg

我在做什麼錯?我該如何解決這個問題?

編輯:我通過重命名文件名的問題解決了......文件名是大小寫敏感的,而不是image1.jpg,應該image1.JPG

謝謝。

+0

是否有任何理由爲什麼此圖像不在公共webcontent中?那麼你不需要一個servlet。 – BalusC 2011-02-28 18:07:49

+0

如果你想成爲一個偉大的程序員有一天(如你的個人資料所述),你真的必須回答上述評論:)這段代碼味道太多了。 – BalusC 2011-03-01 14:21:18

+0

@BalusC我只是在研究可​​能性。我不打算以這種方式使用它。我只是一個初學者..我已經讀了一本書,所以我試着做代碼。 :) – newbie 2011-03-01 14:35:50

回答

3

您可以使用getServletContext().getRealPath("/")獲取到/WEB-INF/的路徑。例如。

String path = getServletContext().getRealPath("/") + "WEB-INF/image/image1.jpg"; 
InputStream is = new FileInputStream(path); 

雖然它不確定這是NPE的原因。你能檢查日誌文件併發布堆棧跟蹤嗎?

+0

'ServletContext.getResource()'不適用於類路徑,它的用法是正確的。 – axtavt 2011-02-28 18:09:41

+0

真的,我的錯誤,與Class.getResource()混合在一起。 – morja 2011-02-28 18:36:16

0

不知道的錯誤,但我認爲這將是更好的轉發請求,而不是人工服務形象:

public class JpegOutput extends HttpServlet { 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     request.getRequestDispatcher("/WEB-INF/image/image1.jpg") 
      .forward(request, response); 
    } 
} 

還要注意的是,你的內容,服務環是不正確,正確的長相像這樣:

while ((read = is.read(bufferArray)) != -1) 
    os.write(bufferArray, 0, read); 
相關問題