2

私の Java Web アプリケーションには、war ファイルに構成ファイル (myapp.xml など) が含まれています。次のように、web.xml ファイルでこのファイルへのパスを指定します。

  <servlet>
    <servlet-name>wc</servlet-name>
    <servlet-class>com.myapp.servlets.WC</servlet-class>
    <init-param>
      <param-name>configfile</param-name>
      <param-value>${catalina.base}/webapps/myapp/WEB-INF/myapp.xml</param-value>
    </init-param>
  </servlet>

問題は、テストと開発のために同じサーバーにさまざまなバージョンをデプロイしたいのですが、それぞれが webapps の下に異なるパスを持つことです。デプロイごとに web.xml ファイルを変更することは避けたいのですが、WEB-INF フォルダーを参照する方法が見つかりません。

これは私がやりたいことです:

  <servlet>
    <servlet-name>wc</servlet-name>
    <servlet-class>com.myapp.servlets.WC</servlet-class>
    <init-param>
      <param-name>configfile</param-name>
      <param-value>${app.base}/myapp.xml</param-value>
    </init-param>
  </servlet>

どこ${app.base} == ${catalina.base}/webapps/myapp/WEB-INF

アプリケーションディレクトリへのパスを与える変数はありますか?

そうでない場合、これを達成するための他の方法を考えてもらえますか?

4

2 に答える 2

1

変数-Dapp.base=/foo/barを tomcat の JVM に渡し (バージョンに応じて catalina.sh または /conf 内のファイル)、WC サーブレットで System.getProperty(..) を使用して読み取ることができます。

これらの構成を外部の場所に置くことをお勧めしますが、デプロイされたアプリケーションに触れずに変更できるようにし、必要に応じて展開された WAR デプロイメントを有効にすることもできます。

アプリケーション内のリソースにアクセスする場合は、絶対パスではなく相対パスを使用することをお勧めします。

  • リソースがクラスパス上にある場合は、使用しますgetClass().getResourceAsAstream(..)
  • リソースがクラスパスの外にある場合は、使用しますservletContext.getResourceAsStream(..)
于 2012-08-06T18:03:10.983 に答える
0

使用できます

...
servletContext().getRealPath("");
...

アプリケーションの物理的なメイン ディレクトリを取得します。

于 2012-08-06T20:03:48.987 に答える