3秒でわかる
Java の Web アプリで URL とサーブレットの対応やフィルタを宣言する設定ファイル。今は減りましたが既存システムでは現役です。
もう少し詳しく
どういうものか
Java の Web アプリケーションを WEB-INF ディレクトリの直下に置く web.xml という XML ファイルで宣言する設定です。配備記述子 (デプロイメントディスクリプタ) と呼ばれます。どの URL をどのサーブレットが処理するか、どんなフィルタを通すか、セッションの有効時間、エラー時に表示するページ、といったアプリ全体の取り決めをここに書きます。Tomcat や Jetty は起動時にこのファイルを読み、記述どおりに配線します。
なぜ必要か
URL とクラスの対応をコードの外に出しておくと、配置先や運用の都合で変えたいときにソースを触らずに済みます。認証フィルタを全体に掛ける、特定パスだけ別のサーブレットに回す、といった横断的な設定も一箇所に集まります。現在は同じことをアノテーションや Spring Boot の自動設定で書けるため新規開発で触る機会は減りましたが、既存の Java Web アプリを読む場面では、どの URL がどこへ行くかを知る最初の手掛かりになります。
具体例
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" version="6.0">
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/views/404.jsp</location>
</error-page>
</web-app>つまずきやすいところ
似た用語との違い
| 書き方 | 設定の置き場所 | 主に使う時期 |
|---|---|---|
| web.xml | XML ファイル | Servlet 2.x 時代からの既存アプリ |
| アノテーション | クラスに直接記述 | Servlet 3.0 以降 |
| Spring Boot の自動設定 | 規約と application.yml | 現在の新規開発 |