javaweb圖片上傳 tomcat從新部署 圖片消失

 
標籤: 圖片上傳tomcat從新部署圖片消失緣由分析以及解決辦法

最近在作一個Javaweb的項目,涉及到圖片上傳,而且須要將圖片經過URL回顯給JSP頁面,在調試的時候發現,上傳到tomcat的圖片再從新部署以後就消失了。研究了半天發現才解決了。首先說一下,我爲何要將圖片存放到tomcat服務器或者更直白點說是web工程目錄下的緣由:前端

項目中對於圖片的處理在於用戶上傳好比本身的頭像,上傳後再查看時,就直接根據服務器的URL指定圖片的位置去查看圖片,通俗點就是jsp頁面中的<img >標籤的src屬性的路徑就直接指向服務器該圖片存放的位置。鑑於這一點,因此將圖片文件存放在了tomcat中,而不放在服務器磁盤文件系統中,這樣前端JSP就能夠直接經過URL訪問到圖片資源。web

發現的問題:在調試的時候,個人開發環境十分通用,就是eclipse for jee ,服務器爲tomcat7.0。在配置eclipse runtime服務器運行環境時,工程發佈的位置選擇的是直接將工程發佈到tomcat的webapps目錄下。配置過程以下:tomcat

1.在爲eclipse添加到tomcat7.0服務器後,將服務器的工程所有remove掉,以下圖:服務器

remove all,而後右鍵clean一下,這時再open,以下圖app

 

在server locations下選擇第二個,這時工程在ADD到服務器時就直接到了tomcat 的webapps目錄下了。eclipse

 

遇到的問題:發現上傳的圖片在改動eclipse上的代碼的時候,也就是從新部署後,tomcat下的webapps中的工程目錄下的圖片所有沒有了,很奇怪,通過研究發現,緣由以下:webapp

咱們在Java代碼中上傳圖片時,圖片的路徑是經過代碼jsp

request.getSession().getServletContext().getRealPath("/img")post

來獲取路徑的,而這句代碼返回的路徑是tomcat中webapps目錄下的工程路徑,圖片就直接保存到了tomcat中。spa

當咱們從新發布工程的時候,tomcat實際上是先將原來的工程刪掉,而後再將改動過的新的工程放上去。而改動過的新的工程師來自與咱們eclipse的工做空間中的工程,這就也難怪了,由於咱們是把圖片直接上傳到的tomcat服務器下,而不是放到工做空間的工程目錄下,天然從新部署後圖片就沒了。

 

解決辦法:

歸根到底的緣由就是由於

request.getSession().getServletContext().getRealPath("/img")

這句代碼搞的鬼,因此在調試時,咱們在Java代碼中保存上傳的圖片位置時將圖片的保存路徑應該保存在eclipse工做空間的目錄下,如:

String path =  "E:\\program\\eclipse project\\Server\\WebContent\\img";

這樣,圖片在上傳到該工做空間後,由於項目發生了改變,eclipse會再次發佈工程,這時圖片便會同步到tomcat服務器中,這時,咱們前端jsp頁面也就能夠經過URL定位到圖片了。

 

注意的地方:

歸根到底這些問題其實仍是由於咱們是在調試的工程中,發佈後確定是不會出現這些問題的。由於你想一想咱們的web工程通常是發佈到Linux下,發佈了以後你的tomcat服務器只有關閉和打開,而不會對工程從新部署,天然也就不會出現這些問題。而後這也同時出現了另一個問題,就是咱們的web系統是在Linux下,也不會有eclipse環境,那也就更不用談什麼工做空間了,因此若是在代碼中String path =  "E:\\program\\eclipse project\\Server\\WebContent\\img";這麼寫系統確定會報錯咯。因此最終來講,改爲這樣也只是權宜之計,方便咱們在調試的時候用的,到項目正式發佈的時候須要咱們再將路徑改爲request.getSession().getServletContext().getRealPath("/img")的。

相關文章
相關標籤/搜索