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应用
《Head First Servlets & JSP》-5-属性和监听
ServletThe servlets named [ByteServlet] and [content.ByteServlet] are both mapped to the url-patte