Java – web.xmlによるルーティングの基本

JavaのWebアプリケーションでは、ルーティングの設定にweb.xmlが用いられるケースがあります。

Servlet 3.0以降はアノテーションによる定義も可能ですが、レガシーな構成や細かい制御では今なおweb.xmlの理解が求められます。

本記事では、web.xmlによるルーティングの基礎とその背景、設定パターンについて丁寧に解説します。

Javaエンジニアとしての基礎力を固めるうえで、必ず押さえておきたい知識です。


1.web.xmlの役割と基本構造

Java EE(現Jakarta EE)のWebアプリケーションには、WEB-INF/web.xmlというデプロイメントディスクリプタが存在します。

  • Webアプリの起動時に読み込まれ、初期設定を担う

  • Servlet、Filter、Listenerなどの登録が可能

  • URLパターンに応じてどの処理を呼び出すか定義できる

基本的な構成は以下のようになります:

<web-app>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.example.HelloServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>

このように、ServletとURLの対応関係を設定することが可能です。

2.ルーティング設定の具体例

web.xmlによるルーティングでは、URLパターンとServlet名を対応付けます。実際の用途に応じて多様なルールを定義できます。

よく使われるURLパターン

  • /*.do:Strutsなど古いMVCでよく使われた形式

  • /api/*:REST APIのエンドポイントとして使うことが多い

  • /login:固定URLへの直接ルーティング

  • *.jsp:JSPページへの直接的なコントロール(非推奨)

複数URLを1つのServletに割り当てる例

<servlet-mapping>
<servlet-name>MainServlet</servlet-name>
<url-pattern>/main</url-pattern>
<url-pattern>/top</url-pattern>
</servlet-mapping>

3.Servletの初期化・順序・パラメータ設定

web.xmlを用いると、Servletの起動順序や初期パラメータの設定も可能です。

起動時にServletをロードする

<servlet>
<servlet-name>InitServlet</servlet-name>
<servlet-class>com.example.InitServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

  • load-on-startupに数値を指定すると、その順序でServletが起動時にロードされる

初期パラメータの設定

<servlet>
<servlet-name>ConfigurableServlet</servlet-name>
<servlet-class>com.example.ConfigurableServlet</servlet-class>
<init-param>
<param-name>configPath</param-name>
<param-value>/WEB-INF/config.xml</param-value>
</init-param>
</servlet>

  • ServletConfig経由でパラメータを取得可能


結論

Javaにおけるweb.xmlによるルーティング設定は、Servletの基本動作を理解する上で重要なポイントです。

アノテーションやSpring Bootの普及により利用頻度は減っていますが、堅牢な構成や既存システム保守において不可欠な存在です。

本記事を通じて、web.xmlの記述とルーティング構成の考え方を習得し、より安定したWebアプリケーション開発に活かしていきましょう。

スッキリわかるサーブレット&JSP入門(Amazon)


SNOWさんの思うこと

どんどん便利かつ複雑になっていくなぁと思っていたころの技術、たぶん10年以上前からあります。

いまはPythonでライブラリを使って頑張ろうという感じから、ノーコードローコード、そして革新的な生成系AIが登場して一気に様変わりしました。

Pythonですでについていけてない、ノーコードからAIのあたりでついていけていない年配の技術者の方、たくさんいます。

それで思うんですけど、いまついていけてない人ってC言語やJavaのころからついていけてなかったんじゃないかって思うんですよね。

ずっと見てきているわけではないけど、少なくとも大学のころからコーディングが得意だった人は、今も設計や開発の現場でバリバリ活躍しています。

技術って基本がしっかりしていれば、そこまで違いがないといえばないですからね。


web.xmlルーティング虫食いクイズ(判定機能付き)

以下の空欄を埋めて、web.xmlの構文を完成させましょう。全問正解すると「正解!」と表示されます。




正しい完成形(30秒表示)