2017-06-21 100 views
1

我正在使用Java Spring Boot并部署到Tomcat 8.1 webapp。参考根的Tomcat servlet相对路径

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

例如,

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

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

输出是

/./temp.txt 

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

代码是创建缓存文件的第三方库,所以我不能切换到绝对路径。

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

+0

我使用的第三方库专门使用了“./pemfile_cached”。上面的代码是我确认我得到相同的结果。这是第三方库,第197行:https://github.com/MachinePublishers/jBrowserDriver/blob/master/src/com/machinepublishers/jbrowserdriver/StreamConnectionClient.java –

+0

您可能需要检查[此链接](https:/ /stackoverflow.com/questions/10680637/servlet-tomcat-relative-file-path)。 TLDR:你可以使用'System.setProperty(“user.dir”,)'来设置当前目录,而不是Tomcat的 – Nathan

+0

如果这样,我将把它作为最后的手段来保存。我宁愿不必为每个电话都明确地设置我目前的工作目录,但如果必须的话,我会的。我怀疑tomcat配置(或缺少配置)是问题,但我不知道从哪里开始寻找。 –

回答

1

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

通过编辑/ etc/systemd /系统tomcat.service文件,并在[服务]部分添加以下内容:

WorkingDirectory=/opt/tomcat 

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