tomcat在哪里存储我的文件?

piah890a  于 2024-01-08  发布在  其他
关注(0)|答案(3)|浏览(160)

我已经使用Netbeans创建了一个Web应用程序。之前,当我通过Netbeans和Tomcat服务器(这是一个zip)运行Web应用程序时,我所有的外部文件(上传的文件和我用于应用程序的其他帮助文件)都存储在bin目录中。
现在,我尝试使用windows installer安装apache tomcat服务,因为我想知道如何在专用服务器上部署项目。我已经使用tomcat的deploy实用程序成功部署了war文件。然而,当我通过apache tomcat windows服务运行项目时,它没有将文件保存在bin目录中,并且它也无法读取我粘贴在bin目录中的文件。
你觉得我应该把文件放在哪里?
编辑:在观察tomcat服务目录时,我发现它存储在根目录中。如果我将tomcat安装在'E:\Apache\services\tomcat',则它存储在'tomcat'目录中。

xqkwcwgp

xqkwcwgp1#

最终,应用程序的操作决定了文件的存储位置。
听起来,您的应用程序将文件存储在JVM的当前目录中,当您通过NetBeans启动Web服务器时,该目录恰好是“bin”目录。如果是这样,您将在Tomcat作为Windows服务启动时的当前目录中找到它们。
坦率地说,我认为你错了。你应该有意识地决定上传的文件应该被存储,然后确保你使用的上传机制把它们放在那里。
显然,把它们放在当前目录是个坏主意。你不希望它们根据web容器的启动方式被存储在不同的地方。显然,“bin”目录是一个不合适的地方。(如果用户试图上传一个文件,其名称与“bin”中的脚本之一匹配,会发生什么?)
那么,你应该把这些文件放在哪里呢?
在我看来你有三个选择

  • work目录的一个目录中.这是Tomcat通常放置临时文件(如已编译的JSP)的地方。
  • 在Tomcat安装目录的自定义目录中。
  • 在文件系统的其他地方的单独目录中。

你不应该将then放到webapp目录中,因为当webapp重新部署时,那里的文件通常会被吹走,而且上传的文件会干扰你的webapp的风险更大。
你不应该把它们放在bin、logs、lib或config目录中,因为有干扰的风险.而且它们根本不是逻辑位置。
如果您想相对于tomcat安装目录的根目录写入文件,您可以通过调用System.getProperty("catalina.base")来找出它是什么。
但是无论你做什么,你都需要确保用户不能意外或故意将文件上传到错误的地方;例如,通过提供绝对路径名,或者使用“../../....”的路径名来逃离你的上传区域。

z2acfund

z2acfund2#

安装Apache时,项目应该在webapp文件夹中:

C:\Apache\tomcat\webapps

字符串
像我的项目是gaganisonline,所以目录结构是这样的:
路径:C:\Apache\tomcat\webapps\gaganisonline

gaganisonline
                            |           |
                         WEB-INF      index.html
                            |
              ---------------------------
              |         |      |        |
            web.xml    src    lib    classes

watbbzwu

watbbzwu3#

如果你问我的话我用这个解决了我自己的问题

private final StorageProperties storageProperties;
private Path rootLocation;

@Override
public void init() {
    try {
        String userHome = System.getProperty("user.home");

        Path targetFolder = Paths.get(userHome, storageProperties.getLocation());
        Files.createDirectories(targetFolder);

        this.rootLocation = targetFolder;
        System.out.println("Initialized storage with root location: " + rootLocation);
    } catch (IOException e) {
        throw new StorageException("Could not create folder", e);
    }
}

字符串
它从Warehouse Properties类获得了我的文件夹名称,然后在视频,照片和东西旁边创建了一个文件夹(C:\Users%USERNAME%),以便更容易访问,并且它不会将任何文件保存到War中,无论如何都找不到,所以我假设它可能是AppData或其他东西,这听起来很烦人和混乱。

相关问题