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

gre*_*law 30 java web.xml servlets web-applications

我正在创建一个需要加载配置信息的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>
Run Code Online (Sandbox Code Playgroud)

我最初的研究似乎表明这是不可能的 - 对于任何param-name(在context-param或init-param中)只能有一个param值.

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

Ram*_*PVK 39

Servlet规范说,任何上下文参数只能有一个值.所以,你只能选择分隔列表.

<context-param>
  <param-name>validHosts</param-name>
  <param-value>example1.com,example2.com,.....</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

  • 我怀疑......好吧,我会这样做,但这并不意味着我必须喜欢它! (4认同)

ste*_*son 19

把每个参数放在自己的行上.我最近做了以下,它工作正常:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/spring-beans.xml
        /WEB-INF/security-config.xml    
    </param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

  • 这只能起作用,因为spring会在ContextLoaderListener中为您分割值.来自[他们的文档](https://github.com/spring-projects/spring-framework/blob/f38a4b9040f50328ccc8c8c4fe54d366ff2c99ba/spring-context/src/main/java/org/springframework/context/support/AbstractRefreshableConfigApplicationContext.java#L62) :_以init-param样式设置此应用程序上下文的配置位置,即使用逗号,分号或空格分隔的不同位置. (3认同)
  • 所以我假设你只是用换行符分割并修剪空白?这肯定会使它更具可读性. (2认同)

Eug*_*sky 13

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

<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
Run Code Online (Sandbox Code Playgroud)