【问题标题】:Tomcat servlet relative path referring to rootTomcat servlet 相对路径指根
【发布时间】:2017-06-21 13:38:18
【问题描述】:

我正在使用 Java Spring Boot 并部署到 Tomcat 8.1 webapp。

当我用相对路径创建一个 new File() 时,它指的是系统的绝对根目录。

例如,

File x = new File("./temp.txt");

System.out.println("X Path: " + x.getAbsolutePath());

输出是

/./temp.txt

这是为什么?我收到了 Java.nio.File.AccessDeniedException,因为 Tomcat 没有写入根目录的权限。

代码是创建缓存文件的第三方库,所以我不能只更改为绝对路径。

是什么导致 Tomcat 使用 / 作为我的工作目录?

【问题讨论】:

  • 我使用的第三方库专门使用了“./pemfile_cached”。上面的代码是我确认我得到了相同的结果。这是第三方库,第 197 行:github.com/MachinePublishers/jBrowserDriver/blob/master/src/com/…
  • 您可能需要查看this link。 TLDR:你可以使用System.setProperty("user.dir", <path>)来设置当前目录,而不是Tomcat的
  • 如果可行,我会将其保存为最后的手段。我宁愿不必为这里的每个调用显式设置我当前的工作目录,但如果我必须这样做,我会的。我怀疑 tomcat 配置(或缺少配置)是问题所在,但我不确定从哪里开始寻找。
  • 原因写在the post I linked。可以找到一个干净的解决方案here
  • 我不明白。您链接的帖子没有提及绝对路径。当我使用 System.getProperty("user.dir") 它返回一个简单的“/”。它不应该返回(如您的链接所示) $CATALINA_HOME/webapps/YOUR_WEB_APP/ 吗?

标签: java file tomcat servlets relative-path


【解决方案1】:

所以我确定了问题所在。 Tomcat,当作为服务(CentOS:systemctl start tomcat)执行时,WorkingDirectory如果没有设置则默认为root。

通过编辑 /etc/systemd/system 中的 tomcat.service 文件并在 [Service] 部分下添加以下内容:

WorkingDirectory=/opt/tomcat

我能够移动第三方库正在写入的目录。

【讨论】:

    猜你喜欢
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    相关资源
    最近更新 更多