2013-07-08 58 views
0

我正在製作一個eBay樣式的web應用程序,用於使用JSP和servlet購買和銷售漫畫書。我正在實施管理員界面來管理註冊用戶可出售的漫畫書的類型。當管理員創建新的漫畫書系列時,例如鋼鐵俠,蜘蛛俠等,servlet將在數據庫中創建一個實例,然後根據新的漫畫書系列的唯一標識符創建一個新的文件夾名稱。因此,如果我創建了一個新的漫畫書系列可以說綠巨人,並且數據庫分配新插入id代碼 25,一個名爲「25」的新文件夾被製作,並且所有未來的漫畫書封面圖像將被存儲在這個文件夾中綠巨人漫畫書。使用servlet在WEB文件夾中創建新目錄不起作用

這就是說,我的問題是,當一切都完成後,servlet說該目錄已經創建,但是當我去檢查時,我發現事實並非如此。

這裏是我的項目目錄:

enter image description here

我使用的是最新的Apache Tomcat與NetBeans IDE 7.2。

下面是創建新的文件夾代碼:

else if (button.equalsIgnoreCase("Insert")) { 
    if (tab.equalsIgnoreCase("Comic")) { 
     String nameComic = request.getParameter("txtnameComicInsert"); 
     if (nameComic != null && nameComic.length() > 0) { 
      Comic co = new Comic(); 
      co.setNomeCollana(nameComic); 
      if (!SqlComic.existsComic(co.getComicName()) && SqlComic.insertNewComic(co) > 0) {      
       sessione.setAttribute("msgVisitaTab", "Inserted successfully!"); 

       co = SqlCollana.getCollana(co.getNomeCollana()); 
       System.out.println("ACCEDI DATABASE SERVLET----> CREARE CARTELLA NELLA DIRECTORY: " + 
            sessione.getServletContext().getRealPath("/") + "Immagini\\" + co.getCodice()); 

       File dir = new File(sessione.getServletContext().getRealPath("/").toString() + "Immagini\\" + co.getCodice()); 
       dir.mkdirs(); 

       if (dir.exists()) 
        System.out.println("ACCESS DATABASE SERVLET----> FOLDER CREATED: " + co.getCodice() + " AT LOCATION: " + dir.getAbsolutePath()); 
       else 
        System.out.println("ACCESSDATABASE SERVLET----> FOLDER NOT CREATED!"); 
      } else {  
       sessione.setAttribute("msgVisitaTab", "Error DURING INSERTION!");      
      } 
     } else { 
      sessione.setAttribute("msgVisitaTab", "FILL ALL FIELDS FOR INSERTION PROCESS TO TAKE PLACE![PROJECT DIRECTORY, all sub folders created must go in /Immagini/][1]"); 
     } 
    } 
} 

因此,代碼工作完美,但沒有任何反應,我似乎無法理解。但我注意到的是,看着Immagini文件夾的屬性,它具有「只讀」保護。我禁用它,但它不斷得到重新激活。

任何想法可能是什麼問題?

+0

請原諒我的錯誤,但我試圖上傳一張照片來向你展示我的項目目錄,我搞砸了。 –

+1

你不應該在webapp中創建文件夾,因爲在你的應用程序的新部署中,這些文件夾將被刪除。 – fmodos

+0

那麼你有什麼建議作爲一種可能的解決方案?我應該在上傳未來圖像之前手動創建文件夾嗎?還是有另一種方式? –

回答

1

請勿在Web應用程序內創建文件夾,因爲WAR文件更改時可能會將其刪除(並重新創建)。我建議在下面代替:

  • 在服務器部署之外的磁盤上使用明確定義的位置dir c:\ data \ uploads \ image \
  • 從web.xml讀取此路徑作爲servlet 上下文參數。
  • 實現servlet上下文監聽器 - onContextInitialized()檢查並創建(如有必要)此文件夾。
    • 要確定該文件夾已準備就緒,請在此目錄中創建一個臨時文件並在其中寫入一些隨機字節。如果路徑不存在,則拋出IOException異常。適當行事。
  • 您必須給出適當的運行時權限才能通過此目錄中的java代碼訪問/修改 文件。
  • 您可以通過外部進程備份此目錄(如果需要)。

希望這適用於你。

+0

確定這對我有意義,但我有一個問題:一旦我將WAR文件部署到服務器上,我的Web應用程序在線時是否可以創建新目錄?或者我有tto重新部署我的項目並再次上傳我的WAR文件?這個網絡應用程序的關鍵是管理員可以創建新的漫畫書系列,從而創建新的目錄,然後上傳新的圖片相對於漫畫書的問題。 –

+0

@SalvatoreServodio你應該能夠創建新的目錄,只要你有適當的文件系統權限。 –

+0

好的謝謝!我會讓你知道事情如何運作 –

相關問題