14

サイト固有の構成データを読み取る必要があるJavaサーブレットを作成しています。展開時にシステム管理者が簡単にアクセス/変更できるようにしたいと思います。賢明なデフォルトはないため、データサイト管理者が提供する必要があります。
これは、いくつかの文字列のキーと値のペアで構成されています(プロパティを考えてください)。(初期化時に)1回だけ読み取られます。

私はこのSOの質問ServletContext.getInitParameter()メカニズムを知っていますが、私の理解では、データをサーブレットパッケージに(プロパティファイルとして、またはで指定して web.xml)バンドルする必要があるため、アップグレードが不便です。サーブレットコード。

この種のキー/値構成データを取得するためのサーブレットの「標準」インターフェースはありますか?プログラミングインターフェイスがどこでも同じであれば問題ありませんが、構成データを設定する実際の方法は、使用されている実際のサーブレットコンテナによって異なります。

ポータブルソリューションを探していますが、TomcatとJettyでのみ機能するものに満足しています。

4

4 に答える 4

18

Webアプリケーション用にアプリケーションサーバーを構成するための推奨される方法は、JNDIごとです。

すべてのアプリケーションサーバー(JettyおよびTomcatを含む)では、JNDIパラメーターを構成できます。

Jettyの場合、jetty.xmlに以下を追加してJNDIパラメーターを追加できますparam.file

<!--  JNDI java:comp/env --> 
<New id="param.file" class="org.mortbay.jetty.plus.naming.EnvEntry">
  <Arg>param.file</Arg> 
  <Arg type="java.lang.String"><SystemProperty name="jetty.home" default="."/>etc/config.properties</Arg> 
  <Arg type="boolean">true</Arg> 
</New> 

次に、サーブレットでJNDIパラメータを読み取ることができます。

import javax.naming.InitialContext;
import javax.naming.NamingException;

...

public Object readJndi(String paramName) {
  Object jndiValue = null;
  try {
    final InitialContext ic = new InitialContext();
    jndiValue = ic.lookup("java:comp/env/" + paramName);
  } catch (NamingException e) {
    // handle exception
  }
  return jndiValue;
}


public String getConfigPath() {
  return (String) readJndi("param.file");
}

JNDI値を設定する方法は、他のアプリケーションサーバーでは異なりますが、構成を読み取るためのコードは常に同じです。

于 2010-09-27T14:27:41.490 に答える
4

サーブレットの初期化パラメータは、管理者が構成できるプロパティを定義するための正しい(そして標準化された)方法です。アプリケーションサーバーの多くは、パラメーターを構成できるGUIバックエンドを提供します。

Tomcatの例については、Tomcatサーブレットコンテキストパラメータの定義を参照してください。

于 2010-09-27T14:36:29.187 に答える
3
  • プロパティの外部の場所を構成します-jvm引数(サーブレットコンテナの起動時)またはweb.xmlのいずれかを使用します

  • 外部の場所で使用config.propertiesし、それを読んでくださいjava.util.Properties

于 2010-09-27T13:48:21.820 に答える
0

環境設定を使用するか、user.home、user.dirなどでハックすることができます。ただし、いくつかのキー/値については、物事を単純にしてください。

プロパティをラップアラウンドし、修正および絶対位置からロードする小さなシングルトンを作成します

public class LocalConfig extends Properties {

  public static LocalConfig $ = new LocalConfig();

  private LocalConfig() throws IOException {
    load(new File("/etc/myconfig.properties"));
  }

}
于 2010-09-27T14:00:05.647 に答える