事實上,<img src>
必須引用公共網頁URL,而不是本地磁盤文件系統路徑。您的圖片必須通過HTTP請求提供。這就是網頁瀏覽器必須下載它們,而不是必須以某種方式包含它們的網絡服務器。
對於初學者來說,最簡單的方法是創建一個servlet它獲取的圖像內容由FileInputStream
的InputStream
基於請求參數或路徑信息,然後將它寫入通常的Java IO方式向HttpServletResponse
的OutputStream
,後已經設置了必要的HTTP響應頭文件,以便瀏覽器理解如何處理它。
例如,假設該servlet被映射在/images/*
並打開圖像http://example.com/contextpath/images/image1.png:
String filename = request.getPathInfo();
File file = new File("/home/website/images", filename);
response.setHeader("Content-Type", getServletContext().getMimeType(filename));
response.setHeader("Content-Length", String.valueOf(file.length()));
InputStream input = new FileInputStream(file);
OutputStream output = response.getOutputStream();
// Stream bytes the usual way.
另一種方法是作爲一個新的Web應用程序上下文添加/home/website/images
到服務器的/images
上下文路徑。通過這種方式,圖像可以通過http://example.com/images/image1.png獲得。您只依賴於servletcontainer make/version如何配置以及您是否完全控制它。對於碼頭,這將是下面的,如果你編程的IT管理:
server.setHandler(new WebAppContext("/home/webapp/images", "/images"));
或者當你通過XML管理IT:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="resourceBase">/home/website/images</Set>
<Set name="contextPath">/images</Set>
</Configure>
好極了! 關於第一種解決方案,假如我的圖像太多,會不會是某種效率不高? 關於我更喜歡的2º解決方案,我將在哪裏設置新的WebAppContext?我可以在xml文件中做到這一點嗎? 非常感謝! =] –
我已經把相同的代碼放在context.xml中,就像你提到的一樣,但它沒有工作......你確定嗎? –
對不起,''必須是''。至於第一種解決方案的效率,對於流式傳輸來說並不差,但它並不考慮瀏覽器緩存請求。 –
BalusC