2012-04-11 17 views
28

Estoy creando un servlet que necesita cargar información de configuración. Parte de la información de configuración que necesito es una lista de cadenas (específicamente, una lista de nombres de host y/o URL).Servlets de Java: almacenamiento de una lista de valores en web.xml (múltiples param-value para param-name único)

Tenía la esperanza de almacenar esta información en el archivo web.xml de mi servlet (para no tener que escribir mi propio analizador) como un parámetro de contexto o init-param; esencialmente param-value múltiples para un solo nombre de parámetro.

Ejemplo de lo que me gustaría:

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

Mi investigación inicial parece indicar esto no es posible - que sólo puede haber un único parámetro-valor para cualquier param-name (ya sea dentro del contexto param o init-param).

Sé que podría utilizar una lista delimitada dentro de un solo valor de parámetro, pero ¿es realmente esa mi única opción si todavía quiero usar web.xml? ¿Debo dejar de lloriquear y escribir mi propio analizador de archivos de configuración?

Respuesta

37

especificación Servlet dice que usted puede tener sólo un valor para cualquier parámetro de contexto. Entonces, te queda ir con la lista delimitada solamente.

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

Como sospechaba ... bien, lo haré, pero eso no significa que tenga que gustarme. – greenlaw

11

Sí, sólo tiene que utilizar delimitadores (como no hay otras opciones disponibles para este):

<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

Coloque cada parámetro en su propia línea. Hice lo siguiente recientemente y funciona bien:

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

Así que supongo que acaba de dividir con un carácter de nueva línea y espacios en blanco recortados? Esto definitivamente lo haría más legible. – greenlaw

+3

Esto solo funciona porque Spring divide los valores por usted en ContextLoaderListener. De [su documentación] (https://github.com/spring-projects/spring-framework/blob/f38a4b9040f50328ccc8c8c4fe54d366ff2c99ba/spring-context/src/main/java/org/springframework/context/support/AbstractRefreshableConfigApplicationContext.java#L62) : _Ajuste las ubicaciones de configuración para este contexto de aplicación en el estilo init-param, es decir, con distintas ubicaciones separadas por comas, punto y coma o espacios en blanco._ – Lucas

Cuestiones relacionadas