【问题标题】:where does tomcat store my files?tomcat 在哪里存储我的文件?
【发布时间】:2012-03-22 01:31:44
【问题描述】:

我使用 Netbeans 创建了一个 Web 应用程序。之前,当我通过 netbeans 和 tomcat 服务器(这是一个 zip)运行 Web 应用程序时,我所有的外部文件(上传的文件和我用于我的应用程序的其他帮助文件)都存储在 bin 目录中。

现在,我尝试使用 Windows 安装程序安装 apache tomcat 服务,因为我想知道如何在专用服务器上部署项目。我已经使用 tomcat 的部署实用程序成功部署了 war 文件。但是,当我通过 apache tomcat windows 服务运行项目时,它没有将文件保存在bin 目录中,并且它也无法读取我粘贴在bin 目录中的文件。

您认为我应该将文件放在哪里?

编辑:通过观察 tomcat 服务目录,我发现它存储在根目录中。如果我将我的 tomcat 安装在 'E:\Apache\services\tomcat\',它会存储在 'tomcat' 目录中。

【问题讨论】:

    标签: java apache tomcat netbeans


    【解决方案1】:

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

    C:\Apache\tomcat\webapps
    

    就像我的项目是 gaganisonline 所以目录结构是这样的:

    路径:C:\Apache\tomcat\webapps\gaganisonline

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

    【讨论】:

    • 是的,我知道我的项目在 webapps 目录中。但是,我想知道当我的 web 应用程序运行时,tomcat 服务器可以在哪里写入和存储文件。还是谢谢。
    • 这里的 ROOT 文件夹是你的 Tomcat 的根目录。您看到的第一页 index.jsp 位于该文件夹中。 Tomcat 正在编写和存储什么样的文件?
    【解决方案2】:

    最终,决定文件存储位置的是您的应用程序所做的事情。

    听起来,您的应用程序将文件存储在 JVM 的当前目录中,当您通过 NetBeans 启动 Web 服务器时,该目录恰好是“bin”目录。如果是这样,您将在 Tomcat 作为 Windows 服务启动时的任何当前目录中找到它们。

    坦率地说,我认为你搞错了。您应该有意识地决定应该存储上传的文件,然后确保您使用的上传机制将它们放在那里。

    显然,将它们放在当前目录中是个坏主意。您不希望根据 Web 容器的启动方式将它们存储在不同的位置。显然“bin”目录是一个不合适的地方。 (如果用户尝试上传名称与“bin”中的脚本之一匹配的文件,会发生什么情况?)


    那么应该把文件放在哪里?

    在我看来,你有三个选择:

    • work 目录的子目录中...这是 Tomcat 通常放置临时文件(例如已编译的 JSP)的位置。

    • 在 Tomcat 安装目录的自定义子目录中。

    • 在文件系统其他地方的单独目录中。

    您不应该将其放到 webapp 目录中,因为重新部署 webapp 时,那里的文件通常会被炸毁,而且上传的文件会干扰您的 webapp 的风险更大。

    您不应该将它们放在 bin 或 logs 或 lib 或 config 目录中,因为存在干扰的风险......而且因为它们根本不符合逻辑。


    如果你想写相对于tomcat安装目录的根目录的文件,你可以通过调用System.getProperty("catalina.base")来查看是什么。

    但是无论您做什么,您都需要确保用户不会意外或故意将文件上传到错误的位置;例如,通过提供绝对路径名,或使用“../../....”的路径名来逃离您的上传区域。

    【讨论】:

    • 在“名称与bin 中的一个脚本匹配”的情况下,我对此有点安全,因为我将它存储在bin 中的一个目录中。无论如何,我想听取您的建议,将其存储在 bin 之外的另一个目录中。我现在的问题是怎么做?我不喜欢使用像C:\Apache\tomcat\file.txt 这样的精确文件路径。我通常使用相对路径。是否有任何解决方法或者我应该使用确切的文件路径?顺便说一句,如果我从我的 web 应用程序访问文件,我的根目录是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多