web.xml の定義( servlet-mapping 要素について)

メモ:

Java の Web アプリケーションは、 URL をサーブレットにマップするためにデプロイメント記述子(Servlet Deployment Descriptor)ファイルを使用します。

URL と作成したサーブレットを対応付ける servlet-mapping 要素について見ていきます。

servlet-mapping 要素の定義

web-app_4_0.xsd (web-common_4_0.xsd) で定義されている servlet-mapping 要素を抜粋すると次のような定義になっています。

<xsd:element name="servlet-mapping" type="javaee:servlet-mappingType"/>

<xsd:complexType name="servlet-mappingType">
    <xsd:sequence>
        <xsd:element name="servlet-name" type="javaee:servlet-nameType"/>
        <xsd:element name="url-pattern" type="javaee:url-patternType" minOccurs="1" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
</xsd:complexType>

xsd:element で定義された要素を servlet-mapping 要素の子要素として記述することができ、 servlet-name 要素は1つの記述が必須となり url-pattern 要素は最低1つの記述が必要になります。

servlet-name 要素と url-pattern 要素の使い方

servlet-name 要素には、servlet 要素内に定義した servlet-name 要素の名前を指定します。 url-pattern 要素にリクエストされる URL の形式を定義して servlet-name と関連付けます。

<servlet-mapping>
    <servlet-name>サーブレット名</servlet-name>
    <url-pattern>URLの形式</url-pattern>
</servlet-mapping>

例えば「 hello 」というサーブレット名に対して、「 /bbb 」という URL を対応付ける場合は次のように記述します。

<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/bbb</url-pattern>
</servlet-mapping>

servlet 要素と servlet-mapping 要素を定義することで、 URL と実際のクラスが関連付けられることになります。

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

上記設定によりブラウザから「 /bbb 」というリクエストが来ると servlet-name 要素の「 hello 」が参照され、 servlet 要素の「 hello 」から実際の HelloServlet.class が呼び出されることになります。

url-pattern 要素は、複数回記述することができるので、次のように定義することもできます。

<servlet-mapping>
    <servlet-name>hello</servlet-name>
    <url-pattern>/aaa</url-pattern>
    <url-pattern>/bbb</url-pattern>
    <url-pattern>/ccc</url-pattern>
</servlet-mapping>