- PR -

web.xmlの要素の順番

1
投稿者投稿内容
みやも
ベテラン
会議室デビュー日: 2002/04/22
投稿数: 74
投稿日時: 2005-05-14 17:04
サーブレットAPI2.4から、web.xmlの<web-app>の子要素の順番は好きにしてになったらしいのですが、うちのTomcat5.5で以下の設定をすると、

<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>foo.HelloServlet</servlet-class>
</servlet>

こんなエラーがでます。

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


このエラーはTomcat依存の問題でしょうか?それとも、<web-app>の子要素は任意とは言っても、他の要素の名前(servlet-nameなど)を利用する場合は、順番に書かないけないものなのでしょうか?

よろしくお願いします。
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2005-05-14 19:39
[quote]サーブレットAPI2.4から、web.xmlの<web-app>の子要素の順番は好きにしてになったらしい[quote]
それは知りませんでした。ソースはありますか?
あえて国際的な標準規格を無視して独自路線を突っ走るというのはちょっと私には信じがたい事です
引用:
こんなエラーがでます。

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


エラーメッセージの通り、HelloServlet なんてどこにもないよという意味です。
tomcatどうのこうのも、web.xmlの記述順序もまったく関係ないでしょうね。
みやも
ベテラン
会議室デビュー日: 2002/04/22
投稿数: 74
投稿日時: 2005-05-14 21:55
>ソースはありますか?

SPECに書いてるようです。

13.1付近
The sub elements under web-app can be in an arbitrary order in this version of
the specification.
(arbitrary order = 任意の順番)


>HelloServlet なんてどこにもないよという

<servlet-name>HelloServlet</servlet-name>
のとこに書いています。


<servlet>要素と<servlet-mapping>を逆にすれば動くのですが。。。


わざわざ、みんな知ってる順番を変えることもないですが、考えてみると、<filter-mapping>とか以外は、順番に意味があるわけでもない気もするのです。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-05-14 23:18
るぱんです。

Eclipseから使おうとして怒られたような記憶が・・・。
普通に動かしたら動いた様な気が・・・。

かなりうろ覚えですけどね。

もしくは、ディレクトリfooがなくて怒られているだけなのか・・・?
みやも
ベテラン
会議室デビュー日: 2002/04/22
投稿数: 74
投稿日時: 2005-05-14 23:54
>Eclipseから使おうとして怒られたような記憶が・・・。

Tomcatのwebappsにディレクトリ作ってやる方法でも同じでした。


>もしくは、ディレクトリfooがなくて怒られているだけなのか・・・?

クラスは認識されてます(普通の順序だと動くので)。


昔は、Resinとかは、web.xmlの子要素の順番変えても「仕様に反して」勝手に動いてました記憶があります。2.4で順番が「任意」になったとして、どこまで任意なものやら?
みやも
ベテラン
会議室デビュー日: 2002/04/22
投稿数: 74
投稿日時: 2005-05-15 00:07
http://www.atmarkit.co.jp/fjava/javatips/037container004.html
に以下のコメントがありました。


注意:ただし、Tomcat 5では、DTDとの後方互換を維持するために、DTDで定義されたものと同じ順序で要素を記述しなくてはならないことになっています。


でも、後方互換ってTomcatが昔のweb.xmlを読めればいい話で、新規のWebアプリが、昔のweb.xmlにあわせないといけないという話ではないような。
(これの元ソースはどこだろう?)
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2005-05-15 10:14
失礼しました。私の勉強不足です。
XML Schemaに変わってたんですね。
引用:

でも、後方互換ってTomcatが昔のweb.xmlを読めればいい話で、新規のWebアプリが、昔のweb.xmlにあわせないといけないという話ではないような。


私もそう思います。DTDでチェックかけてもOKになるようにっていう配慮かと思いますけど、それを強制するのはちょっと不思議ですね。
1

スキルアップ/キャリアアップ(JOB@IT)