からWebアプリケーションのルートを解決は、私は私のWebアプリケーションでは、このようなファイル構造を持っているのgetResource
this.getClass().getResource("/WEB-INF/reports/info.txt");
は、この解決します?私はそれをテストしようとしていますが、Tomcatのクラスローダーがどのように解決するかはわかりません。これでうまくいかない場合は、どうすればファイルを入手できますか?
からWebアプリケーションのルートを解決は、私は私のWebアプリケーションでは、このようなファイル構造を持っているのgetResource
this.getClass().getResource("/WEB-INF/reports/info.txt");
は、この解決します?私はそれをテストしようとしていますが、Tomcatのクラスローダーがどのように解決するかはわかりません。これでうまくいかない場合は、どうすればファイルを入手できますか?
まず、this.getClass().getResource
は動作しません(私は試していませんが)。これはクラスパスではなく、ServletContextなので、ServletContext.getResource
を使う必要があります。
問題は、ファイルである必要はありません。WARアーカイブ内のエントリにすることができます。だから正確にあなたが知っていることに応じて、答えは異なるかもしれません。
両方のファイル(使用可能であればServletContext.getResourcePaths
経由)とWAR(ServletContext.getResource
経由)の両方を処理するSpringユーティリティクラスを使用します。あなたがSpringを使用するなら、それが最良の方法かもしれません。そうしないと、おそらくソリューションを再実装する必要があります。
ServletContext.getResourceAsStream
を使用するだけで正確にリソースが格納されている場所には関係ありません。だからあなたがその道を必要とし、道を必要としない限り、あなたは大丈夫でしょう。
いいえ、解決されません。 Class.getResource
はクラスパスからリソースをロードし、webappのルートディレクトリ自体はクラスパス上にありません。
そのリソースを取得するには、ServletContext
を取得し、ServletContext.getResource("/WEB-INF/reports/info.txt")
と呼ぶ必要があります。それはうまくいくはずです。
ServletContext
は、Servlet.getServletConfig().getServletContext()
を使用して取得できます。
reports
ディレクトリの/WEB-INF/classes
ディレクトリ(はクラスパスの)の下に移動します。あなたはファイルを取得することができます
getClass().getResource("reports/info.txt");
ええ、これは私がサーブレットコンテナの内部と外部で作業するために必要なことです。私はTomcatやEclipseのjUnitクラスパスにあるかどうかにかかわらず、私は与えられたパスを得ることができるかなり標準的なAPIが必要です。使用しているこのAPIは何ですか?私はSpring 3を使用しています。 –
コンテナの外に必要な場合は、クラスパスにリソースを保持し、Servlet APIには触れないでください。 – alf
Springの 'ResourceLoader' /' ApplicationContext'を使ってファイルを読み込みます。謝辞: –