tomcat在哪里存储我的文件?

tomcat在哪里存储我的文件?

问题描述:

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

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

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

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

当您安装Apache,这个项目应该是Web应用程序文件夹中:

C:\Apache\tomcat\webapps 

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

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

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

是的,我知道我的项目在webapps目录中。但是,我想知道当我的webapp运行时,tomcat服务器在哪里编写和存储这些文件。不管怎么说,还是要谢谢你。 – braindead 2012-03-04 08:17:03

+0

这里的ROOT文件夹是Tomcat的根。您看到的第一页index.jsp驻留在该文件夹中。 Tomcat正在编写什么类型的文件并假设要存储? – 2012-03-04 08:34:51

最终,它是您的应用程序确定文件存储位置的方式。

通过它的声音,您的应用程序将文件存储在JVM的当前目录中,当您通过NetBeans启动Web服务器时,恰好是“bin”目录。如果是这样,你会发现它们,无论当前目录是什么时候Tomcat作为Windows服务启动。

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

显然,把它们放在当前目录是一个坏主意。您不希望它们存储在不同的地方,具体取决于Web容器的启动方式。很明显,“bin”目录是不恰当的地方。 (如果用户试图上载其名称匹配的是生活在“bin”的脚本的一个文件,会发生什么?)


那么,应该你可以把文件?

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

  • work目录的子目录中......这就是传统的Tomcat把暂时的文件,如编译的JSP。

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

  • 在文件系统中其他位置的单独目录中。

你不应该在webapp目录下探话,因为文件通常有吹走当Web应用重新部署,因为有这么上传的文件将与你的web应用干扰的风险更大。

由于存在干扰的风险,您不应该将它们放在bin或logs或lib或config目录中,因为它们根本就不是合乎逻辑的地方。


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

但是,你要做什么,你需要确保用户不会无意或故意将文件上传到错误的地方;例如通过提供绝对路径名或使用“../../....”从您的上传区域转义的路径名。

+0

在“名称匹配'bin中的其中一个脚本”的情况下,我有点安全,因为我将它存储在'bin'的一个目录中。无论如何,我想把你的建议存储在另一个目录旁边。我现在的问题是如何做到这一点?我不喜欢使用像'C:\ Apache \ tomcat \ file.txt'这样的确切文件路径。我通常使用相对路径。有没有任何解决方法,或者我应该使用确切的文件路径? 如果我从我的webapp中访问文件,我的根目录是什么? – braindead 2012-03-04 04:22:25

+0

查看已更新的答案... – 2012-03-04 09:43:53