Java Servlets - 在 web.xml 中存储值列表(单个参数名称的多个参数值)

Posted

技术标签:

【中文标题】Java Servlets - 在 web.xml 中存储值列表(单个参数名称的多个参数值)【英文标题】:Java Servlets - Storing a list of values in web.xml (multiple param-value's for single param-name) 【发布时间】:2012-04-24 01:56:18 【问题描述】:

我正在创建一个需要加载配置信息的 servlet。我需要的部分配置信息是字符串列表(特别是主机名和/或 URL 列表)。

我希望将这些信息作为上下文参数或初始化参数存储在我的 servlet 的 web.xml 文件中(这样我就不必编写自己的解析器);一个参数名称本质上是多个参数值。

我想要的示例:

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

我的初步研究似乎表明这是不可能的——任何参数名称(在上下文参数或初始化参数中)只能有一个参数值。

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

【问题讨论】:

【参考方案1】:

您应该使用; 将它们分隔在参数值标签中,例如:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

将每个参数放在自己的行上。我最近做了以下事情,效果很好:

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

【讨论】:

所以我假设你只是用换行符分割并修剪空白?这肯定会让它更具可读性。 这仅适用于 spring 在 ContextLoaderListener 中为您拆分值。来自their documentation:以 init-param 样式设置此应用程序上下文的配置位置,即用逗号、分号或空格分隔的不同位置。【参考方案4】:

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

<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

【讨论】:

以上是关于Java Servlets - 在 web.xml 中存储值列表(单个参数名称的多个参数值)的主要内容,如果未能解决你的问题,请参考以下文章

conf/web.xml-------------org.apache.catalina.servlets.DefaultServlet

Head First Servlets & JSP 学习笔记 第五章 —— 作为Web应用

ServerEndpoint 和 web.xml

《Head First Servlets & JSP》-5-属性和监听

ServletThe servlets named [ByteServlet] and [content.ByteServlet] are both mapped to the url-patte

Java Servlets 线程模型