2017-06-21 94 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 

我能夠移動目錄所在的第三方庫在寫。