29

さまざまなサーバー上の Tomcat の多くのインスタンスにインストールする Java サーブレットを作成します。サーブレットは、WEB-INF の下の war ファイルにパックされたいくつかの静的ファイルを使用します。これは、標準的なインストールのディレクトリ構造です。

- tomcat
-- webapps
--- myapp
---- index.html
---- WEB-INF
----- web.xml
----- classes
------ src
------- .....
----- MY_STATIC_FOLDER
------ file1
------ file2
------ file3

静的ファイルを読み取ることができるように、MY_STATIC_FOLDER の絶対パスを知るにはどうすればよいですか?

「現在のフォルダー」(新しいファイル(「。」)で取得したもの)は、Tomcatサーバーがどこから開始されたかに依存するため、インストールごとに異なるため、信頼できません!

4

3 に答える 3

44

相対的なWebコンテンツパスを絶対ディスクファイルシステムパスに変換するために使用できます。ServletContext#getRealPath()

String relativeWebPath = "/WEB-INF/static/file1.ext";
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
File file = new File(absoluteDiskPath);
InputStream input = new FileInputStream(file);
// ...

ただし、それを利用することが唯一の目的である場合は、代わりにInputStream使用することをお勧めします。これは、WARがローカルディスクファイルシステムではなく、メモリや仮想ディスクに展開されるたびに返される可能性があるためです。ServletContext#getResourceAsStream()getRealPath()null

String relativeWebPath = "/WEB-INF/static/file1.ext";
InputStream input = getServletContext().getResourceAsStream(relativeWebPath);
// ...

java.io.Fileこれは、アプローチよりもはるかに堅牢です。さらに、使用getRealPath()は悪い習慣と見なされます。

参照:

于 2011-07-05T14:14:33.510 に答える
0

これを試すことができます
String relativeWebPath = "WEB-INF/static/file1.ext";
InputStream input = getServletContext().getResourceAsStream(relativeWebPath);

于 2011-07-05T15:06:06.920 に答える
-2

getResourceaAsStreamオプションを使用して、親ディレクトリに基づいてリソースをロードすることをお勧めします。

getClass().getClassLoader().getResourceAsStream("/MY_STATIC_FOLDER/file1");
于 2011-07-05T14:16:17.920 に答える