Java Servlets - 在web.xml中存储值列表(单个param-name的多个param-value)

35

我正在创建一个Servlet,需要加载配置信息。其中一部分我需要的配置信息是字符串列表(具体来说是主机名和/或URL列表)。

我希望将这些信息存储在我的Servlet的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>

我的初步研究似乎表明这是不可能的 - 在任何参数名(在context-param或init-param中)中只能有一个param-value。

我知道我可以在单个param-value中使用分隔列表,但是如果我仍然想使用web.xml,这真的是我的唯一选择吗?我应该停止抱怨并编写自己的配置文件解析器吗?

5个回答

46

Servlet规范规定您只能为任何上下文参数设置一个值。因此,您只能使用分隔列表。

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

21

将每个参数放在自己的一行上。我最近就是这样做的,而且它完全可以正常工作:

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

2
所以我假设你只是用换行符分割并修剪了空格?这肯定会使它更易读。 - greenlaw
3
这只有在ContextLoaderListener中为您拆分值时才能正常工作。从它们的文档中可以看到:“以init-param样式设置此应用程序上下文的配置位置,即使用逗号、分号或空格分隔的不同位置。” - Lucas

14

是的,只需使用分隔符(因为没有其他选项可用于此):

<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

-1

在 param-value 标签中,应该使用 ; 来分隔它们:

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

-3

这对我有效。正确的分隔符是;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接