首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java Web 專案中使用絕對路徑顯示圖片:三種方案對比

     編輯:程式設計綜合問答

圖片存放在項目外部(如 /data/images/),JSP/HTML 需以絕對路徑訪問。三種主流方案各有優劣。

方案一:配置虛擬目錄映射 (推薦生產)

Tomcat server.xml:

<Context docBase="/data/images" path="/images" />

JSP 頁面:<img src="${pageContext.request.contextPath}/images/photo.jpg">

  • 優點:URL 乾淨、權限可控、支援靜態資源緩存。
  • 缺點:需修改容器配置,遷移麻煩。

方案二:Servlet 輸出圖片流 (推薦安全)

@WebServlet("/img/*")
public class ImageServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        String name = req.getPathInfo().substring(1); // 去掉首個 /
        File file = new File("/data/images", name);
        if (file.exists()) {
            resp.setContentType(getServletContext().getMimeType(name));
            Files.copy(file.toPath(), resp.getOutputStream());
        } else resp.sendError(404);
    }
}

JSP:<img src="img/photo.jpg">

  • 優點:可做權限校驗、防盜鏈、動態水印。
  • 缺點:每次請求經 Java 處理,性能略低於靜態資源。

方案三:file:// 協議 (僅本地測試)

<img src="file:///D:/project/images/photo.jpg">
  • 缺點:瀏覽器安全策略限制(跨域、混合內容),生產環境不可用。

最佳實踐

  1. 生產環境:Nginx 反向代理靜態資源目錄 location /images/ { alias /data/images/; },性能最優。
  2. 開發環境:Spring Boot ResourceHandlerRegistry.addResourceHandler("/images/**").addResourceLocations("file:/data/images/")。
  3. 絕對路徑在代碼中配置化:app.image.root=/data/images,避免硬編碼。

選對方案,圖片訪問穩如磐石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved