これは、なにをしたくて書いたもの?
このブログのエントリー内で時々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 | The Eclipse Foundation
仕様書内にサンプルがあったので、そちらを元にしています(後でバージョン別にまとめます)。
Jakarta EE/Java EEのXMLスキーマの一覧
ところで、Jakarta EE/Java EEのXMLスキーマについては一覧ページが存在します。
Jakarta EE XML Schemas | The Eclipse Foundation
Java EE: XML Schemas for Java EE Deployment Descriptors
仕様書のサンプルから
では、まずは仕様書のサンプルから見ていきましょう。
Jakarta Servlet
Jakarta Servlet 6.0
Jakarta Servlet 6.0 | The Eclipse Foundation
仕様書。
仕様書内の「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 | The Eclipse Foundation
仕様書。
仕様書内の「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
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">
<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">