1. 程式人生 > >Javaweb上傳圖片或檔案到伺服器,Tomcat伺服器重新部署專案,會刪除原來上傳的檔案的問題

Javaweb上傳圖片或檔案到伺服器,Tomcat伺服器重新部署專案,會刪除原來上傳的檔案的問題

解決辦法!!!

你按這幾個步驟去做,就能解決問題:
1.把/tomcat/webapps/目錄清空,刪掉該資料夾的所有內容,
2.修改/tomcat/conf/web.xml檔案:

<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <
param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>true</param-value> </init-param> <load-on
-startup>1</load-on-startup> </servlet>

3.修改/tomcat/conf/server.xml檔案:

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">

        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
<!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/> --> <!----><Context path="/ser" docBase="D:\project\myProject\editor\WebRoot"></Context> <!--<Context path="/mvc" docBase="D:\project\myProject\area\WebRoot"></Context>--> </Host>

其實就是給工程配置虛擬路徑,這樣tomcat在啟動的時候直接找到你的工程了,
你上傳的圖片就不會跑到/tomcat/webapps/目錄,而是直接到了你的工程裡,
不管你怎樣重啟專案,或者清理快取,上傳的檔案依然存在!

再來解釋一波!

D:\project\myProject\editor\WebRoot 這個路徑是專案的web根目錄,editor是專案名稱, 那麼D:\project\myProject\editor\src 就是你存放java檔案的根目錄了
/ser 就是專案應用的名稱了,或者說是上下文路徑,這個名稱可以隨意修改
如果你的tomcat埠是 8080, 那麼專案的訪問路徑就是 http://localhost:8080/ser
上傳時就會在D:\project\myProject\editor\WebRoot\ 目錄中建立資料夾
不管你怎樣重啟專案,或者清理快取,上傳的檔案依然存在, 因為上傳的檔案都已經存在於你的專案中
這樣方式只需要部署一次,沒有重新部署的說法

如果你是在eclipse中點來點去的部署專案,也就等於是把D:\project\myProject\editor\WebRoot目錄的所有檔案和資料夾都複製到了 /tomcat/webapps/editor/目錄下,那麼專案的訪問路徑就是 http://localhost:8080/editor
上傳時就會在 /tomcat/webapps/editor/ 目錄中建立資料夾
只要重新部署或清理快取,上傳的檔案都煙消雲散了
因為重新部署時,先刪除 /tomcat/webapps/editor/ 目錄,再複製一遍D:\project\myProject\editor\WebRoot目錄的所有檔案和資料夾

總結

其實就是我們的開發工具eclipse或者myeclipse導的鬼
部署web專案,別在eclipse中點來點去的部署,那樣雖然快捷,但實際上是複製專案到tomcat,有很多弊端!
修改tomcat的配置檔案正好解決這個問題,
你反過來想一想,javaweb專案的伺服器一般都是linux系統,linux系統中不可能安裝eclipse,
所以在linux系統中部署專案,就是修改配置檔案,然後執行命令啟動tomcat,
重新redeploy的時候 tomcat 會同步你本地的檔案 因為你本地沒有相應的資料夾 自然導致檔案丟失。
這只是在開發過程中會遇到的問題 實際應用中 tomcat 只會 startup.bat/sh shutdown.bat/sh
這樣部署後,request.getSession().getServletContext().getRealPath(“/”);得到的是專案的WebRoot根目錄,比如:D:\project\myProject\editor\WebRoot,上傳檔案時的資料夾自然就會建立在專案中,
如果你在eclipse中點來點去的部署,得到的卻是tomcat的webapps根目錄,資料夾就會建立在tomcat中,