ServletにおけるコンテキストルートとURLの関係について紹介します。
条件
- JDK 1.8
- Eclipse Version: Neon.3 Release (4.6.3)
前提
以下のようなServletを作成します。
コンテキストルートは、「servletTest」です。
コンテキストルートとURLの関係
warの階層構造
Eclipseにおいて、当該プロジェクトを右クリック > エクスポート > WARファイル を実行し、「servletTest.war」を出力します。
warファイルの中身を確認するため、拡張子をzipに変更し「servletTest.zip」とします。
servletTest.zipの中身を確認すると、以下のようになっています。
servletのURL
Eclipse上でservletTestを実行します。
上記から、以下のようなパスになっていることが確認出来ます。
http://localhost:8080/servletTest(コンテキストルート)/(各種リソースファイル)
「servletTest.war」の階層構造の通りです。
EclipseにおけるWebContentフォルダ
ここで一つ疑問が生まれます。
Eclipse上では、servletTestというプロジェクトの下に「WebContent」というフォルダがあり、この下に各種リソースファイルが配置されています。
しかし、Eclipse上でservletTestを実行しても、URLに「WebContent」というパスは入らず、servletTest.warの階層構造通りのパスとなっています。
「WebContent」は一体どうなってしまったのでしょうか?
servletTestのプロパティ―で「Webデプロイメント・アセンブリ―」を確認します。
すると、ソース「/WebContent」がデプロイ・パス「/」に設定されていることがわかります。
すなわち、この設定によりEclipseが「/WebContent」を「/」に読み替えて、「servletTest.war」と同様のURLパスで各種リソースファイルにアクセス出来るようになっています。
ちなみに、この設定を変更したりすると、サーブレットがエラーになる可能性が高いので気を付けてください。