2012-01-05 13 views
2

からWebアプリケーションのルートを解決は、私は私のWebアプリケーションでは、このようなファイル構造を持っているのgetResource

this.getClass().getResource("/WEB-INF/reports/info.txt"); 

は、この解決します?私はそれをテストしようとしていますが、Tomcatのクラスローダーがどのように解決するかはわかりません。これでうまくいかない場合は、どうすればファイルを入手できますか?

答えて

3

まず、this.getClass().getResourceは動作しません(私は試していませんが)。これはクラスパスではなく、ServletContextなので、ServletContext.getResourceを使う必要があります。

問題は、ファイルである必要はありません。WARアーカイブ内のエントリにすることができます。だから正確にあなたが知っていることに応じて、答えは異なるかもしれません。

両方のファイル(使用可能であればServletContext.getResourcePaths経由)とWAR(ServletContext.getResource経由)の両方を処理するSpringユーティリティクラスを使用します。あなたがSpringを使用するなら、それが最良の方法かもしれません。そうしないと、おそらくソリューションを再実装する必要があります。

ServletContext.getResourceAsStreamを使用するだけで正確にリソースが格納されている場所には関係ありません。だからあなたがその道を必要とし、道を必要としない限り、あなたは大丈夫でしょう。

+0

ええ、これは私がサーブレットコンテナの内部と外部で作業するために必要なことです。私はTomcatやEclipseのjUnitクラスパスにあるかどうかにかかわらず、私は与えられたパスを得ることができるかなり標準的なAPIが必要です。使用しているこのAPIは何ですか?私はSpring 3を使用しています。 –

+0

コンテナの外に必要な場合は、クラスパスにリソースを保持し、Servlet APIには触れないでください。 – alf

+0

Springの 'ResourceLoader' /' ApplicationContext'を使ってファイルを読み込みます。謝辞: –

5

いいえ、解決されません。 Class.getResourceはクラスパスからリソースをロードし、webappのルートディレクトリ自体はクラスパス上にありません。

そのリソースを取得するには、ServletContextを取得し、ServletContext.getResource("/WEB-INF/reports/info.txt")と呼ぶ必要があります。それはうまくいくはずです。

ServletContextは、Servlet.getServletConfig().getServletContext()を使用して取得できます。

reportsディレクトリの/WEB-INF/classesディレクトリ(はクラスパスの)の下に移動します。あなたはファイルを取得することができます

getClass().getResource("reports/info.txt"); 
関連する問題