それでは/WEB-INF/urlrewrite.xmlに記述する内容について見ていこう。以下はStrutsの「アクション名.do」を「アクション名.html」にマッピングする場合の例だ。
<urlrewrite>
<rule>
<from>(.*)\.html</from>
<to type="forward">$1.do</to>
</rule>
</urlrewrite>
このように
<urlrewrite>
<outbound-rule>
<from>(.*)\.do</from>
<to>$1.html</to>
</outbound-rule>
</urlrewrite>
これによって
<!-- 修正前 -->
<a href="login.do">ログイン画面へ</a>
<!-- 修正後 -->
<a href="<%= response.encodeURL("login.do") %>">ログイン画面へ</a>
実はStrutsのアクションの拡張子を変更するだけであれば、Url Rewrite Filterを使わなくてもweb.xmlでActionServletのマッピングを変更するだけでも対応可能だ。しかしUrl Rewrite ilterはより複雑、かつ柔軟なマッピングを行うことができる。たとえばパラメータとしてユーザIDを受け取りユーザの情報を表示するアクションがあったとしよう。通常のStrutsアプリケーションでは以下のようなURLになるはずだ。
userInfo.do?userId=ユーザID
これを次のようなURLにマッピングしてみよう。
userInfo/ユーザID
ルール定義は以下のようになる。
<rule>
<from>userInfo/(.*)$</from>
<to type="forward">userInfo.do?userId=$1</to>
</rule>
もちろんこれはルール定義の一例でしかないが、工夫次第で様々な変換が可能であることがおわかりいただけたのではないかと思う。