2017-06-21 107 views
1

私はJava Spring Bootを使用してTomcat 8.1 webappにデプロイしています。ルートを参照するTomcatサーブレット相対パス

相対パスで新しいFile()を作成すると、システムの絶対的なルートを参照しています。例えば

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

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

出力は

/./temp.txt 

これはなぜあるのですか? Tomcatにルートに書き込む権限がないため、Java.nio.File.AccessDeniedExceptionが発生します。

コードはキャッシュファイルを作成する第三者のライブラリであるため、絶対パスに変更することはできません。

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:Tomcatの – Nathan

+0

の代わりに 'System.setProperty(" user.dir "、)'を使って現在のディレクトリを設定することができます。それが動作すれば、最後の手段として保存します。私はむしろ明示的に私の現在の作業ディレクトリをここにすべての呼び出しのために設定する必要はないだろうが、もし私がする必要があります。私は、Tomcatの設定(または構成が不足している)が問題だと思っていますが、それを探し始める場所がわかりません。 –

答えて

1

だから私は問題を決めました。 Tomcatは、サービスとして実行されると(CentOS:systemctl start tomcat)、設定されていなければWorkingDirectoryはデフォルトでrootになります。の/ etc/systemdに/システムのtomcat.serviceファイルを編集し、[サービス]セクションの下に次を追加することにより

WorkingDirectory=/opt/tomcat 

私はサードパーティのライブラリを書いていたディレクトリを移動することができました。

関連する問題