2012-04-11 10 views
28

Tworzę serwlet, który musi załadować informacje konfiguracyjne. Częścią informacji o konfiguracji, której potrzebuję, jest lista Ciągów (w szczególności lista nazw hostów i/lub adresów URL).Serwlety Java - Przechowywanie listy wartości w pliku web.xml (wiele wartości parametrów dla pojedynczej nazwy paramicznej)

Miałem nadzieję zapisać te informacje w pliku web.xml mojego serwletu (więc nie muszę pisać własnego parsera) jako kontekst-param lub init-param; zasadniczo wiele wartości param dla pojedynczego paramname.

Przykład co chciałbym:

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

moich wstępnych badań wskazuje na to, to nie jest możliwe - że nie może być tylko jeden param-value dla każdego param-name (wewnątrz albo od kontekstu param lub init-param).

Wiem, że mógłbym użyć rozdzielonej listy w ramach jednej wartości parametru, ale czy to naprawdę moja jedyna opcja, jeśli nadal chcę korzystać z web.xml? Czy powinienem przestać marudzić i napisać własny parser plików konfiguracyjnych?

Odpowiedz

37

Servlet Spec mówi, że można mieć tylko jedną wartość dla każdego parametru context. Pozostaje ci więc tylko wpisywanie ograniczonej listy.

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

Jak podejrzewałem .... dobra, zrobię to, ale to nie znaczy, że muszę to lubić! – greenlaw

11

Tak, wystarczy użyć ograniczniki (jak nie ma innych opcji dostępnych dla tego):

<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

Wprowadź każdy parametr w osobnej linii. Zrobiłem ostatnio następujące i to działa dobrze:

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

Zakładam więc, że po prostu podzielisz znak nowej linii i przycięte białe znaki? To z pewnością sprawi, że będzie bardziej czytelny. – greenlaw

+3

Działa to tylko dlatego, że wiosna dzieli wartości dla ciebie w ContextLoaderListener. Z [ich dokumentacji] (https://github.com/spring-projects/spring-framework/blob/f38a4b9040f50328ccc8c8c4fe54d366ff2c99ba/spring-context/src/main/java/org/springframework/context/support/AbstractRefreshableConfigApplicationContext.java#L62) : _Ustaw lokalizacje config dla tego kontekstu aplikacji w stylu init-param, tzn. Z oddzielnymi lokalizacjami oddzielonymi przecinkami, średnikami lub białymi spacjami. – Lucas