java - tomcat在哪里存储我的文件?

标签 java apache tomcat netbeans

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

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

你认为我应该把我的文件放在哪里?

编辑:观察 tomcat 服务目录后,我发现它存储在根目录中。如果我的 tomcat 安装在“E:\Apache\services\tomcat\”,它存储在“tomcat”目录中。

最佳答案

最终,您的应用程序将决定文件的存储位置。

听起来,您的应用程序将文件存储在 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")来查明是什么。

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

关于java - tomcat在哪里存储我的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9552058/

相关文章:

java - 如何提取位于页面源脚本标记内的字符串

java - Jsoup获取标签的值(value)

java - 引用 Java 动态数组

php - URL RewriteRule .htaccess 以获得更 SEO 友好的形状

java - java中任何集合或数据结构都是非阻塞的

python - Django Apache SSL [代码 400,消息错误请求]

apache - solrconfig.xml中的solr.data.dir相对指向哪里?

java - IntelliJ IDE | .iml 文件丢失或删除

tomcat - 本地主机 :8080 displays type error "code" : "Forbidden" on any servers

maven - 由于 Geotools Maven 库 : "SEVERE: A child container failed during start",Tomcat 无法启动