2012-04-11 9 views
28

設定情報を読み込む必要があるサーブレットを作成しています。私が必要とする構成情報の一部は、文字列のリスト(具体的には、ホスト名やURLのリスト)です。Javaサーブレット - web.xmlに値のリストを格納する(複数のparam-valueの単一のパラメータ名)

私はこの情報を私のサーブレットのweb.xmlファイルに保存したいので(私自身のパーサーを書く必要はありません)、context-paramまたはinit-paramのどちらかとしてください。基本的に単一のparam-nameに対する複数のparam-valueです。私が望むものの

例:

<context-param> 
    <param-name>validHosts</param-name> 
    <param-value>example1.com</param-value> 
    <param-value>example2.com</param-value> 
    <param-value>example3.com</param-value> 
</context-param> 

私の最初の研究は、これが不可能であることを示しているようだ - だけの任意のparam-nameに単一のparam-値が存在することができることを(、コンテキストのいずれかの範囲内paramまたはinit-param)を使用します。

単一のparam-value内で区切られたリストを使用することはできますが、まだweb.xmlを使用したいのであれば、私の唯一の選択肢ですか?ちょうどうんざりを止め、自分の設定ファイルパーサーを書くべきですか?

答えて

37

サーブレットの仕様では、任意のコンテキストパラメータ 1つの値だけを持つことができると言います。だから、あなたは区切られたリストだけで行くと残されます。

<context-param> 
    <param-name>validHosts</param-name> 
    <param-value>example1.com,example2.com,.....</param-value> 
</context-param> 
+4

私は大丈夫、私はそれをやる....疑われるとして、それは私がそれを好きに持って意味するものではありません! – greenlaw

11

はい、ちょうど(このために利用可能な他のオプションなしとして)区切り文字を使用します。

<context-param> 
    <param-name>validHosts</param-name> 
    <param-value>example1.com,example2.com,example3.com</param-value> 
</context-param> 



then simply 
String[] validHosts = param.split(","); // not really much to do 
18

各パラメータをそれぞれの行に入力します。私は最近、以下のことを行なったし、それが正常に動作します:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/spring-beans.xml 
     /WEB-INF/security-config.xml  
    </param-value> 
</context-param> 
+1

改行文字で区切り、空白を整えたと仮定します。これは確かにそれをより読みやすくするでしょう。 – greenlaw

+3

これは、SpringがContextLoaderListenerの値を分割するためにのみ機能します。 [そのドキュメント](https://github.com/spring-projects/spring-framework/blob/f38a4b9040f50328ccc8c8c4fe54d366ff2c99ba/spring-context/src/main/java/org/springframework/context/support/AbstractRefreshableConfigApplicationContext.java#L62)から、 :_このアプリケーションコンテキストの設定場所をinit-paramスタイルで設定します。つまり、別々の場所をカンマ、セミコロンまたは空白で区切って区切ります。 – Lucas

関連する問題