[英]Cannot find a resource file, after exporting java project as JAR, and trying to use it in a Dynamic Web Project in ECLIPSE
[英]Cannot find the image in the java dynamic web project
我有以下問題:
我創建了應該繪制動態圖的servlet。 在繪制過程中,它應該從另一個目錄中獲取圖片並將其繪制到另一個圖像上。 一切都應該正常工作:
try {
BufferedImage temp = ImageIO.read(new File("image/arrow.png"));
tempIm = temp.getScaledInstance(55, 55, Image.SCALE_SMOOTH);
} catch (IOException e) {
e.printStackTrace();
}
但是它顯示以下內容:
SEVERE: javax.imageio.IIOException: Can't read input file! at javax.imageio.ImageIO.read(ImageIO.java:1275) at CertificateDraw.doGet(CertificateDraw.java:36)
我試圖以所有可能的方式更改File對象的路徑,即使圖像的一部分仍被發送到瀏覽器,它也只會帶來相同的問題。 所以問題出在ImageIO.read部分-我如何找到為什么它不加載圖像?
我正在Eclipse中工作-servlet在src文件夾中。 該圖像位於rot目錄“ WebContent”下的“ image”文件夾中。
java.io.File
中的相對路徑是相對於當前工作目錄(CWD)的。 這是在發出命令以啟動Java運行時環境(在您的情況下是Web服務器)時當前打開的文件夾。 在Eclipse中啟動服務器時,通常是項目的/bin
文件夾。 您可以通過打印new File(".").getAbsolutePath()
。
但是您根本不應該依賴File
中的相對路徑。 不能從代碼內部控制CWD。
因為它已經在webcontent文件夾中,所以只需通過ServletContext#getResourceAsStream()
來獲取它。
InputStream input = getServletContext().getResourceAsStream("/image/arrow.png");
BufferedImage image = ImageIO.read(input);
// ...
注意, getServletContext()
繼承自HttpServlet
擴展的GenericServlet
類,因此您無需自己提供方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.