2012-04-11 11 views
28

Sto creando un servlet che deve caricare le informazioni di configurazione. Parte delle informazioni di configurazione di cui ho bisogno è un elenco di stringhe (in particolare, un elenco di nomi host e/o URL).Servlet Java - Memorizzazione di un elenco di valori in web.xml (più valori-param per nome-parametro singolo)

speravo di memorizzare queste informazioni nel file web.xml di mio servlet (in modo da non dover scrivere il mio parser) sia come context-param o init-param; essenzialmente più valori param per un singolo nome param.

Esempio di quello che vorrei:

<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> 

La mia ricerca iniziale sembra indicare questo non è possibile - che non ci può essere solo un singolo param-value per qualsiasi param-name (all'interno dell'uno o al contesto param o init-param).

So che potrei semplicemente usare una lista delimitata in un singolo valore-parametro, ma è davvero la mia unica opzione se voglio ancora usare web.xml? Dovrei semplicemente smettere di piagnucolare e scrivere il mio parser di file di configurazione?

risposta

37

Servlet spec dice che si può avere un solo valore per ogni parametro di contesto. Quindi, si rimane solo con la lista delimitata.

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

Come sospettavo .... va bene, lo farò, ma questo non significa che mi debba piacere! – greenlaw

11

Sì, basta usare delimitatori (come altre opzioni disponibili per questo):

<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

Inserire ciascun parametro sulla propria riga. Ho fatto quanto segue di recente e funziona benissimo:

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

Quindi presumo che tu abbia appena diviso con un carattere di nuova riga e spazi bianchi tagliati? Questo lo renderebbe sicuramente più leggibile. – greenlaw

+3

Funziona solo perché primavera divide i valori nel ContextLoaderListener. Da [la loro documentazione] (https://github.com/spring-projects/spring-framework/blob/f38a4b9040f50328ccc8c8c4fe54d366ff2c99ba/spring-context/src/main/java/org/springframework/context/support/AbstractRefreshableConfigApplicationContext.java#L62) : _Impostazione delle posizioni di configurazione per questo contesto dell'applicazione in stile init-param, ovvero con posizioni distinte separate da virgole, punti e virgola o spazi bianchi._ – Lucas

Problemi correlati