(続)web.xmlの要素の順番

http://d.hatena.ne.jp/muimy/20050514#p1
の続き。ちょっと整理。


少し昔の話題ですが、サーブレットAPI2.3→2.4になるときに、
web.xmlの構造がいくらか変わりました。大きく変わったのは、スキーマ(構造)の定義が、DTDからスキーマになったことです。


変わったメリットは、web.xml文書の文法をもちょっと細かく決めて定義できるということ。例えばこんなチェックがXMLのバリデータでできるようになりました。

-<servlet-name>はユニーク
-<session-timeout>の子要素は数字だけ
-<dispatcher>の子要素はREQUEST、FOWARD...などだけで、要素の出現回数は0〜"4"回

XMLのバリデータでチェックできるということは、つまり、APサーバを起動したり、サーバの検証ツールを実行とかしなくても、文法チェック機能のあるXMLエディタを使えば、編集しながら、その場でチェックが可能になるということです。



(まぁ、構造の定義は、W3CXMLスキーマでなく、RELAX NGの方がよかったという話はおいておいて。。。)。



で、2.4でもう一つ変わったのが、の子要素の順番が任意になったということ。
以下のweb.xmlは2.3では誤りです。だって、要素は全部の前に書かないといけないですから。でも、2.4では、OKです。

<web-app>
    <servlet>
        <servlet-name>ServletA</servlet-name>
        <sevvlet-class>ServletA</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>ServletA</servlet-name>
        <url-pattern>/servleta</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>ServletB</servlet-name>
        <sevvlet-class>ServletB</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>ServletB</servlet-name>
        <url-pattern>/servletb</url-pattern>
    </servlet-mapping>

</web-app>


なのですが、この記述は2.4でもダメなようなのです。

<web-app>
    
    <servlet-mapping>
        <servlet-name>ServletA</servlet-name>
        <url-pattern>/servleta</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>ServletA</servlet-name>
        <sevvlet-class>ServletA</servlet-class>
    </servlet>

</web-app>


Tomcatの場合、起動時にエラーになります。

Caused by: java.lang.IllegalArgumentException: 
サーブレットマッピングは未知のサーブレット名 ServletA を指定しています 

で、以下のことが疑問なのです。


の定義は、利用する要素より後に書かないといけない」といったようなプチ仕様はどこかにあるのだろうか?

(というか、SPECを細かく読めば、きっと、このプチ仕様がどこかに書いてるような気がするんだけど、読み取れないので、知ってたら誰か教えてくださいみたいな感じです)


もしないとすれば、

アプリケーションサーバで、上のようなエラーになるのは、実装が仕様を満たしてないとも考えられるけど、それってTomcatだけ?それともWASやWebSphereもそうなの?

まぁ、そんな順番で書かないからいいっちゃいいんだけど。



5/29 追記:質問中
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=21266&forum=12&6
http://www.vc-net.ne.jp/~ytp/bbs/java/bbs23000.html
http://www.mail-archive.com/tomcat-user@jakarta.apache.org/msg153150.html



5/29 追記:APサーバによる違い
×Tomcat 5.5.9
×Jetty 5.1.3
○Weblogic8.1J SP4 ←動いた!?