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

Tomcat 部署路徑問題:重新發布導致上傳圖片被清空的解決方案

     編輯:程式設計疑難解答

問題背景

在使用 Struts2 + XWork2 開發 Java Web 專案時,採用 Eclipse 部署至 Tomcat 的預設 wtpwebapps 目錄。上傳的圖片儲存在部署路徑下的絕對路徑,資料庫存儲相對路徑供前端 <img src> 使用。但每次 Tomcat 重新發布(重新部署)專案時,wtpwebapps 目錄會被清空重建,導致已上傳的圖片遺失。

核心解決方案:將靜態資源與 Web 應用分離

在 Tomcat 的 conf/server.xml 中,於 <Host> 標籤內新增 <Context> 元素,將圖片儲存目錄映射為獨立的虛擬路徑,使其不隨 Web 應用重新部署而受影響。

具體配置步驟(以 Windows 為例)

  1. 開啟 tomcat/conf/server.xml。
  2. 在 <Host name="localhost" ...> 區塊內加入:
<Context path="/images" docBase="E:/images" debug="0" reloadable="false"/>
  • path="/images":對外訪問的虛擬路徑(如 https://localhost:8080/images/xxx.jpg)。
  • docBase="E:/images":實體儲存目錄,建議放在專案外部的固定磁碟路徑。
  • reloadable="false":避免 Tomcat 監視該目錄變更而觸發重載。
  1. 重新啟動 Tomcat。
  2. 將上傳邏輯修改為將檔案寫入 E:/images(或對應的 docBase 路徑)。
  3. 前端引用時使用 <img src="/images/xxx.jpg"> 即可正常顯示。

優勢

  • 圖片與程式碼完全解耦,重新部署、更新 WAR 檔均不影響現有圖片。
  • 便於後續擴展:可輕鬆遷移至獨立檔案伺服器、CDN 或物件儲存(如 S3、OSS)。
  • 避免因專案重新部署導致資料遺失的風險。

補充建議

生產環境建議進一步採用分散式檔案系統或雲端儲存服務,並透過資料庫記錄檔案元資料(路徑、大小、上傳時間等),實現更健壯的檔案管理架構。

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