2012-04-11 21 views
28

我正在創建一個需要加載配置信息的servlet。我需要的部分配置信息是一個字符串列表(特別是主機名和/或URL列表)。Java Servlets - 在web.xml中存儲值列表(單參數名的多個參數值)

我希望將這些信息存儲在我的servlet的web.xml文件中(所以我不必編寫自己的解析器)作爲context-param或init-param;基本上是一個參數名稱的多個參數值。

我想什麼

例子:

<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名單PARAM值(無論是上下文內param或init-param)。

我知道我可以在一個參數值中使用分隔列表,但是如果我仍然想使用web.xml,那真的是我唯一的選擇嗎?我應該停止抱怨並編寫自己的配置文件解析器嗎?

回答

37

Servlet規範說,你只能有一個對任何情況下的參數值。所以,你只剩下分隔列表。

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

正如我懷疑....好吧,我會做到這一點,但這並不意味着我必須喜歡它! – greenlaw 2012-04-12 13:14:32

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 2012-04-12 13:20:04

+3

這隻適用於因爲彈簧在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 2016-07-11 16:26:07