CLOVER🍀

That was when it all began.

web.xmlのweb-app要素の書き方がわからない

これは、なにをしたくて書いたもの?

このブログのエントリー内で時々web.xmlを書いているのですが、web-app要素をどう書いたらいいのかよくわからなくなってきたので、
調べてまとめておくことにしました。

web-app要素というのは、よくあるこういうもののことを指しています。

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

どうしていたか?

昔は検索などで引っかかった記事などからコピーしていたものですが、最近はServletの仕様書を元にしていました。

今はJakarta Servletですね。

Jakarta Servlet | The Eclipse Foundation

仕様書内にサンプルがあったので、そちらを元にしています(後でバージョン別にまとめます)。

Jakarta EE/Java EEのXMLスキーマの一覧

ところで、Jakarta EE/Java EEのXMLスキーマについては一覧ページが存在します。

Jakarta EEのXMLスキーマの一覧はこちら。

Jakarta EE XML Schemas | The Eclipse Foundation

Java EE 8以前のXMLスキーマの一覧はこちら。

Java EE: XML Schemas for Java EE Deployment Descriptors

仕様書のサンプルから

では、まずは仕様書のサンプルから見ていきましょう。

Jakarta Servlet
Jakarta Servlet 6.0

Jakarta Servlet 6.0の場合。

Jakarta Servlet 6.0 | The Eclipse Foundation

仕様書。

Jakarta Servlet Specification

仕様書内の「A Basic Example」の記述です(このバージョンはプレースホルダーになっていたので6_0および6.0に書き直しました)。
※インデントも修正しています

<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
                             web-app_6_0.xsd"
         version="6.0">

Jakarta Servlet Specification / Deployment Descriptor / Examples / A Basic Example

Jakarta Servlet 5.0

Jakarta Servlet 5.0の場合。

Jakarta Servlet 5.0 | The Eclipse Foundation

仕様書。

Jakarta Servlet Specification

仕様書内の「A Basic Example」の記述。 ※インデントは修正

<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
                             web-app_5_0.xsd"
         version="5.0">

Jakarta Servlet Specification / Deployment Descriptor / Examples / A Basic Example

Java Servlet
Java Servlet 4.0

Java Servlet 4.0の場合。

The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 369

仕様書は、ダウンロードページから。

The Java Community Process(SM) Program - communityprocess - final

仕様書内の「A Basic Example」の記述。 ※インデントは修正

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                             web-app_4_0.xsd"
         version="4.0">

Apache Tomcatから

ここまでが、仕様書のサンプルを元にした記述でした。

ですが、ちょっと短い気がします。特にxsi:schemaLocation属性の部分が。

というわけで、Servlet/JSPコンテナの実装であるApache Tomcatのソースコードをサンプルにして見てみました。
webapps/ROOT/WEB-INF/web.xmlというファイルを対象に見ていきます。

なお、Apache Tomcatのバージョンと各仕様の対応は以下のページに書かれています。

Apache Tomcat® - Which Version Do I Want?

Jakarta Servlet
Jakarta Servlet 6.0(Apache Tomcat 10.1.x)

Jakarta Servlet 6.0の場合。対応するApache Tomcatは、10.1.xです。

<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
                             https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
         version="6.0">

https://github.com/apache/tomcat/blob/10.1.0/webapps/ROOT/WEB-INF/web.xml

Jakarta Servlet 5.0(Apache Tomcat 10.0.x)

Jakarta Servlet 5.0の場合。対応するApache Tomcatは、10.0.xです。

<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
                             https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">

https://github.com/apache/tomcat/blob/10.0.26/webapps/ROOT/WEB-INF/web.xml

Java Servlet 4.0(Apache Tomcat 9.0.x)

Java Servlet 4.0の場合。対応するApache Tomcatは、9.0.xです。

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

https://github.com/apache/tomcat/blob/9.0.67/webapps/ROOT/WEB-INF/web.xml

比べてみる

Java EE 8で比較してみましょう。

仕様書のサンプルから。

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                             web-app_4_0.xsd"
         version="4.0">

Apache Tomcat。

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

なんとなく、Apache Tomcatの書き方の方が見慣れている気がします…。無難には、こちらかなと…。