2013-07-08 25 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

好的谢谢!我会让你知道事情如何运作 –

相关问题