0

我正在制作一个 eBay 风格的 Web 应用程序,用于使用 JSP 和 servlet 购买和销售漫画书。我正在实现管理员界面来管理注册用户可以销售的漫画书类型。当管理员创建一个新的漫画系列时,例如钢铁侠、蜘蛛侠等,servlet 将在数据库中创建一个实例,然后根据新系列漫画的唯一标识符创建一个新的文件夹名称。因此,如果我创建一个新的漫画系列,比如说 Hulk,并且数据库分配新的插入idCode 25,则会创建一个名为“25”的新文件夹,并且所有未来的漫画封面图像都将存储在此文件夹中,以供所有 Hulk 漫画使用图书。

话虽如此,我的问题是,当一切都完成后,servlet 说目录已经创建,但是当我去检查时,我发现情况并非如此。

这是我的项目目录:

在此处输入图像描述

我正在使用最新的 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文件夹的属性,它具有“只读”保护。我禁用它,但它不断以某种方式重新激活。

知道问题可能是什么吗?

4

1 回答 1

1

不要在您的网络应用程序中创建文件夹,因为当 WAR 文件更改时,它可能会被删除(并重新创建)。我建议改为:

  • 在服务器部署目录之外的磁盘上使用明确定义的位置,例如 c:\data\uploads\image\
  • 从 web.xml 中读取此路径作为 servlet 上下文参数。
  • 实现一个 servlet 上下文侦听器 onContextInitialized()- 检查并在必要时创建此文件夹。
    • 要绝对确定该文件夹已准备就绪,请在此目录中创建一个临时文件并在其中写入一些随机字节。如果路径不存在,将抛出 IOException 并有原因。采取适当的行动。
  • 您必须提供适当的运行时权限才能通过此目录中的 java 代码访问/修改文件。
  • 您可以通过外部进程备份此目录(如果需要)。

希望这对你有用。

于 2013-07-09T04:04:44.493 回答