部署描述符中元素的顺序

Order of elements in deployment descriptor

在 Eclipse 中我收到错误 Invalid content was found starting with element 'description'. No child element is expected at this point.

警告来自我的 web.xml 在这个位置:

<init-param>
    <param-name>email</param-name>
    <param-value>my@example.com</param-value>
    <description>Some description.</description>
</init-param>

我在同一位置的同一文件中遇到了类似的 display-name 错误:

<servlet>
    <servlet-name>AxisServlet</servlet-name>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-class>
      org.apache.axis.transport.http.AxisServlet
    </servlet-class>
</servlet>

一些谷歌搜索让我找到了 this answer,它说 description 元素必须放在第一位。

遵循该建议对我的两个案例都有效,并且我的错误消失了。上述答案中的信息来源 link 已损坏,我无法在官方文档中找到此信息。

为什么这是规范中的要求,我在哪里可以阅读更多相关信息?

你可以通过xsd。 www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/web-common_3_1.xsd

分享一下我阅读它的方法。从 XSD 中提到的 web.xml 开始。

  1. In http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/web-app_3_1.xsd --> 看一个import <xsd:include schemaLocation="web-common_3_1.xsd"/>
  2. 访问http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/web-common_3_1.xsd
  3. 搜索文本 'init-param'。标签<xsd:element name="init-param" type="javaee:param-valueType" minOccurs="0" maxOccurs="unbounded">表示initi-param的类型是'javaee:param-valueType'。也在这里找到 <xsd:include schemaLocation="javaee_7.xsd"/>
  4. 前往 http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/javaee_7.xsd
  5. javaee_7.xsd中,s见元素'param-valueType'

    的定义

    <xsd:complexType name="param-valueType"> <xsd:annotation> <xsd:documentation>...</xsd:documentation> </xsd:annotation> <xsd:sequence> <xsd:element name="description" type="javaee:descriptionType" minOccurs="0" maxOccurs="unbounded"/> <xsd:element name="param-name" type="javaee:string"> <xsd:annotation> <xsd:documentation> The param-name element contains the name of a parameter. </xsd:documentation> </xsd:annotation> </xsd:element> <xsd:element name="param-value" type="javaee:xsdStringType"> <xsd:annotation> <xsd:documentation> The param-value element contains the value of a parameter. </xsd:documentation> </xsd:annotation> </xsd:element> </xsd:sequence> <xsd:attribute name="id" type="xsd:ID"/> </xsd:complexType>