Friendly URLsとは、TapestryのURL表記をフレンドリーなものにする設定のことです。
Tapestryのデフォルトでは、
http://xxxx/xxx/app?page=Home&service=page
という風になります。これでは、簡単に推測してアタックできます。
これを
http://xxxx/xxx/Home.html
という風にするのが、Friendly URLsです。
なお、今回はpageサービスとdirectサービスにFriendlyURLs設定を施します。
他にもassetエンコーダーや独自のサービスエンコーダー設定などもありますが、
そちらは、この記事の一番下のドキュメントを参照してください。
設定するには、以下のファイルに設定項目を記述します。
まずは、HiveMind設定ファイル(WEB-INF/hivemodule.xml)から。
こちらに使用するサービスエンコーダー設定を行います。
以下のように設定します。
<?xml version="1.0" encoding="Windows-31J"?> <module id="my" version="1.0.0"> <!-- ServiceEncoderの設定 --> <contribution configuration-id="tapestry.url.ServiceEncoders"> <!-- ページサービスエンコーダーを設定 このエンコーダーはpageサービスに対して機能する。 --> <page-service-encoder id="page" extension="html" service="page"/> <!-- ダイレクトサービスエンコーダーを設定 このエンコーダーはdirectサービスに対して機能する。 --> <direct-service-encoder id="direct" stateless-extension="direct" stateful-extension="sdirect"/> </contribution> </module>
上記の設定では、pageサービスにHTML、ステートレスdirectにdirect、ステートフルdirectにsdirectという
拡張子を指定しています。このように設定することで、Tapestryは該当する拡張子から該当するサービスを
決定して実行するようになります。
あとは、上記で設定した拡張子に対してマッピングを行えば終わりです。
なお、もう必要ないので/appのマッピングは削除しています。
<servlet-mapping> <servlet-name>MyTapestrySampleNoSpindle</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>MyTapestrySampleNoSpindle</servlet-name> <url-pattern>*.direct</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>MyTapestrySampleNoSpindle</servlet-name> <url-pattern>*.sdirect</url-pattern> </servlet-mapping>
これで、設定は終わりなのですが、/appのマッピングを削除したので、
前回設定したリダイレクトフィルターの設定がおかしくなっています。
実は、リダイレクトフィルターには、パラメータが渡せるようになっており、
リダイレクト先が指定できるようになっています。
前回設定したフィルター設定の部分を以下のように変更します。
<!-- Tapestryのリダイレクトフィルターを設定 これを設定することにより、ブラウザからhttp//xxxx/xxx/という パスを設定された際に、http://xxxx/xxx/appにリダイレクトするようになる。 このフィルターには、パラメータを渡すことができ、 パラメータ名redirect-pathにルートパスが指定された際の リダイレクト先を設定できる。 --> <filter> <filter-name>redirect</filter-name> <filter-class>org.apache.tapestry.RedirectFilter</filter-class> <init-param> <param-name>redirect-path</param-name> <param-value>/Home.html</param-value> </init-param> </filter> <filter-mapping> <filter-name>redirect</filter-name> <url-pattern>/</url-pattern> </filter-mapping>
これで、ルートパスを指定された場合に、Home.htmlにリダイレクトするようになりました。
これで設定完了です。
ブラウザから画面を表示してみると、
http://xxxx/xxx/Home.html
となっているはずです。また、ページリンクの場合、今までは
http://xxxx/xxx/app?page=ThirdSample&service=page
となっていたのが、
http://xxxx/xxx/ThirdSample.html
となっていると思います。
Friendly URLsについては、以下のドキュメントが参考になります。
http://tapestry.apache.org/tapestry4.1/UsersGuide/friendly-urls.html
追記:それでも、directサービスの場合は、
http://xxxx/xxx/Home,myForm001.direct
のように、カンマ付きのURLになってしまうんですねぇ・・。
なんか嫌やな。w