web.xml 中的多个 URL 模式元素
Posted
技术标签:
【中文标题】web.xml 中的多个 URL 模式元素【英文标题】:Multiple URL pattern elements in web.xml 【发布时间】:2012-10-03 20:05:22 【问题描述】:在符合 J2EE Web 应用程序 2.4 版的 web.xml 中的元素中是否可以包含多个元素,如下所示:
<filter-mapping>
<filter-name>SomeFilter</filter-name>
<url-pattern>*.htm</url-pattern>
<url-pattern>*.do</url-pattern>
</filter-mapping>
我从这里查找了 XSD“web-app_2_4.xsd”文件:http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd 定义如下:
<xsd:complexType name="filter-mappingType">
<xsd:annotation>
<xsd:documentation>
some documentation here
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="filter-name"
type="j2ee:filter-nameType"/>
<xsd:choice>
<xsd:element name="url-pattern"
type="j2ee:url-patternType"/>
<xsd:element name="servlet-name"
type="j2ee:servlet-nameType"/>
</xsd:choice>
<xsd:element name="dispatcher"
type="j2ee:dispatcherType"
minOccurs="0" maxOccurs="4"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:ID"/>
</xsd:complexType>
URL 模式定义如下所示:
所以我认为,我们可以在元素中包含多个元素。 然而,我的 Eclipse IDE 似乎不同意我的观点,并且需要一个“调度程序”标签。
看图:
【问题讨论】:
我认为 xsd:choice 元素只是意味着您必须选择其中的一个元素,即 url-pattern 或 servlet-name。 从 J2EE 2.5 规范检查 xsd of >= 2.5 中允许使用多个 url 模式 【参考方案1】:显然没有,但你可以:
<filter-mapping>
<filter-name>SomeFilter</filter-name>
<url-pattern>*.htm</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>SomeFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
【讨论】:
你能有两个同名的过滤器吗? 这会将相同的过滤器 (SomeFilter) 映射到两个不同的 url 模式。官方文档:docs.oracle.com/cd/E13222_01/wls/docs81/webapp/…【参考方案2】:maxOccurs
和 minOccurs
在 sequence
元素中的默认值为 1
:https://msdn.microsoft.com/en-us/library/ms256089(v=vs.110).aspx。
而choice
只允许其中一个元素:https://msdn.microsoft.com/en-us/library/ms256109(v=vs.110).aspx
【讨论】:
@Darshana 谢谢。已更新。以上是关于web.xml 中的多个 URL 模式元素的主要内容,如果未能解决你的问题,请参考以下文章