URLパターン(拡張子マッピング)

広告

次もワイルドカードを使った記述方法です。特定の拡張子に該当する全てのファイルへマッピングを行います。

例えば"HelloWorld.class"というクラスに対して、"hello"というサーブレット名を付けます。そして「*.gif」で始まるURLが呼ばれた場合にこのサーブレットが呼び出されるようにしてみます。

<web-app>
  <servlet>
    <servlet-name>
      hello
    </servlet-name>
    <servlet-class>
      HelloWorld
    </servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>
      hello
    </servlet-name>
    <url-pattern>
      *.gif
    </url-pattern>
  </servlet-mapping>
</web-app>

この場合、呼び出しのURLの最後が「.gif」で終わる全ての呼び出しに対して指定のサーブレットを実行します。例えば下記のどの呼び出し方をしても同じサーブレットが呼び出されます。

http://localhost:8080/webxmltest/sample.gif
http://localhost:8080/webxmltest/hello.gif
http://localhost:8080/webxmltest/hello/abc.gif

※Webアプリケーションのパスを「webxmltest」としています。

特定の拡張子に対する全ての処理を特定のサーブレットに行わせる場合に有効なマッピングです。

サンプル

では一度試してみます。

web.xml

※上記は同じ名前のファイルを使う関係でリンク先には「web4.xml」というファイルがリンクされています。実際に使う時には「web.xml」に名前を変更してご利用下さい。

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  version="2.4">

  <servlet>
    <servlet-name>hello1</servlet-name>
    <servlet-class>HelloWorld1</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>hello1</servlet-name>
    <url-pattern>*.gif</url-pattern>
  </servlet-mapping>
</web-app>

作成した「web.xml」をWebアプリケーションのディレクトリの中の「WEB-INF」ディレクトリに配置します。

また実際に呼び出すサーブレットとして下記のファイルをコンパイルし、Webアプリケーションのディレクトリの中の「WEB-INF¥classes」ディレクトリに配置します。

HelloWorld1.java

では実際にサーブレットを呼び出して見ます。

http://localhost:8080/webxmltest/hello.gif

上記のように呼び出すと「HelloWorld1.class」が呼び出されて下記のように表示されます。

URLパターン

呼び出しのURLの最後が「.gif」で、全て同じサーブレットを呼び出しますので、例えば下記のように呼び出しても同じサーブレットが呼び出されます。

http://localhost:8080/webxmltest/abc/def/ghi.gif

結果は同じように下記のようになります。

URLパターン

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)