2011-04-01 15 views
0

ディレクトリへのパスを受け入れ、File(path);でロードするライブラリを使用する必要があります。 Tomcat Webアプリケーションコンテキストのパスは何ですか?Javaを使ってTomcatでリソースを読み込む方法ファイルapi

私はいつもクラスパスで動作しますが、このAPIは、本当に

...を通じて考えていない私は、TomcatのJava実行コンテキストでの経験を持っていないが、それは悪い考えはこのような何かをやって私には思えます

System.getProperty("catalina.base") + "webapps/app/WEB-INF/classes/profiles" 

tomcatはアプリケーションコンテキストのリソースに対してJava実行(AKA $ PWD)パスを提供しますか?

答えて

4

ServletContext#getRealPath()を使用すると、Webアプリケーション相対パスを絶対ディスクファイルシステムパスに変換できます。あなたの例を考えると、次のように実行する必要があります。これは、WARが展開されていることを必要とすることに

String path = getServletContext().getRealPath("/WEB-INF/classes/profiles"); 
File file = new File(path); 
// ... 

注意を、それ以外の場合は、nullを返します。 TomcatはデフォルトでWARを展開しますが、他のservletcontainers/configは展開しません。移植性に関してこれを覚えておいてください。

+0

@Vladimir Dyuzhev:答えの最後の段落と、OPがTomcatを使用しているという事実を忘れましたか?あなたはユニコーンを愛していましたか? :) – BalusC

+0

私は単に彼らがローカルに正しいときにも、間違った答えを全体的に見ることを後悔します。 :) –

+0

@erica:Vladimirはコメントを削除しましたが、理由はすべてのコンテナがWARを展開するわけではないことと、これがTomcatで設定可能であることです。かなり馬鹿げた、はい:) – BalusC

2

アプリケーションリソースはファイルシステム上に存在する必要はないため、コンテキストパスアプローチからの検索は単に間違っています。

アプリケーションに外部構成(プロパティファイルまたはDB)を提供する必要があります。ここでは、環境に応じてパスを定義する必要があります。コンフィギュレーションを検索する

次の順番:

  1. System.properties:-Dmy.configuration = /ホーム/ tomcatに/ my.properties
  2. システム環境:MY_CONFIGURATION = /ホーム/ tomcatに/ my.properties
  3. デフォルト値:./my.properties(通常はTomcatの場合はbinフォルダですが、保証されません)
  4. 失敗して不平を言います。
+0

おめでとうございますが、このアプリはTomcat専用です – lisak

+1

右。あなたの後に来る人々にあなたの混乱をきれいにさせてください。 –

関連する問題