Javaサーブレットを別のサーバー上のTomcatの多くのインスタンスにインストールしたいのですが、サーブレットはWEB-INFの下のwarファイルにパックされたいくつかの静的ファイルを使用します。これはディレクトリです一般的なインストールの構造:
- Tomcat
-- webapps
--- myapp
---- index.html
---- WEB-INF
----- web.xml
----- classes
------ src
------- .....
----- MY_STATIC_FOLDER
------ file1
------ file2
------ file3
静的ファイルを読み取れるように、MY_STATIC_FOLDERの絶対パスを知るにはどうすればよいですか?
「現在のフォルダー」(新しいFile( "。")で取得するもの)は、Tomcatサーバーがどこから起動されたかに依存するため、信頼できません。これは、インストールごとに異なります。
ServletContext#getRealPath()
を使用して、相対Webコンテンツパスを絶対ディスクファイルシステムパスに変換できます。
_String relativeWebPath = "/WEB-INF/static/file1.ext";
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
File file = new File(absoluteDiskPath);
InputStream input = new FileInputStream(file);
// ...
_
ただし、InputStream
を取得することが唯一の目的である場合は、代わりにServletContext#getResourceAsStream()
がnull
を返す可能性があるため、代わりに getRealPath()
を使用することをお勧めします。 WARはローカルディスクファイルシステムで拡張されません(Tomcatはデフォルトで拡張されますが、拡張しないように構成できます)。
_String relativeWebPath = "/WEB-INF/static/file1.ext";
InputStream input = getServletContext().getResourceAsStream(relativeWebPath);
// ...
_
結局、これは_Java.io.File
_アプローチよりもはるかに堅牢です。