Tomcat JVM - 根文件夹引用

时间:2015-12-22 18:54:28

标签: java tomcat servlets java-ee

以下代码返回war文件夹的路径(即/ ROOT /):

getServletContext().getRealPath("/");

我需要从这一点开始使用一个文件夹,我该怎么做呢?

我尝试了以下内容:

    final String path = getServletContext().getRealPath("./");
    final String path2 = getServletContext().getRealPath("../");
    final String path3 = getServletContext().getRealPath(".../");

我需要保存ROOT文件夹之外的文件,但只有一级,所以每次我更新我的网站时,它都不会替换ROOT文件夹中的物理上传文件,而只是触摸网页网站文件。

由于

3 个答案:

答案 0 :(得分:0)

我们甚至不知道您的WAR文件是否已解压缩:Tomcat可以在不解压缩的情况下部署它们,这样您就可以使用非文件系统路径。

正如评论中所讨论的,执行此操作是不好的做法,您应该确定存储数据的位置 - 例如:数据库,外部存储,文件系统中的某个位置。然后,“只是”通过您的Web应用程序为这些文件提供单独的下载选项 - 单独或压缩。

答案 1 :(得分:0)


您可以使用的另一种解决方案是指向外部文件夹的符号链接。 您可以在项目外侧创建一个文件夹,例如在tomcat路径中的webapps文件夹的同一级别上。 我们将为该示例命名上传。

现在,在您的部署脚本中(假设您有一个),您可以轻松地创建从uploads文件夹到项目内文件夹的符号链接。 它允许您从项目内部获取文件,当您重新部署时,文件不会被删除。

例如:

ln -s /var/lib/tomcat6/uploads /var/lib/tomcat6/webapps/myWebApp/uploads

以上示例适用于我的tomcat6发行版,但您可以更改路径以使用您的设置。

这个答案使用了3个假设:

  1. 您的WAR文件已解压缩。
  2. 您有一个部署脚本,如果没有,您可以轻松创建一个bash脚本 这样做。
  3. 您需要的解决方案是非分布式设置(每个服务器都拥有自己的文件)。
  4. Liron

答案 2 :(得分:-1)

您必须在战争的位置使用File的API。

   File root = new File(getServletContext().getRealPath("./"));
   String parent = root.getParent();

   String parentParent = new File(parent).getParent();