URLマッピング


Slim3はリクエストURLパスをコントローラに自動的にマッピングします。そのため設定ファイルに定義を記述する必要はありません。
マッピングルールは以下のようになっています。

 リクエストパス  コントローラ
 /  <slim3.rootPackage>.controller.IndexController
 /xxx  <slim3.rootPackage>.controller.XxxController
 /xxx/  <slim3.rootPackage>.controller.xxx.IndexController
 /xxx/yyy  <slim3.rootPackage>.controller.xxx.YyyController
 /xxx/yyy/zzz  <slim3.rootPackage>.controller.xxx.yyy.ZzzController

<slim3.rootPackage> は web.xml で定義されています。

GWTを使用している場合は次のようになります:

 リクエストパス
 コントローラ
 / <slim3.rootPackage>.server.controller.IndexController
 /xxx <slim3.rootPackage>.server.controller.XxxController
 /xxx/ <slim3.rootPackage>.server.controller.xxx.IndexController
 /xxx/yyy <slim3.rootPackage>.server.controller.xxx.YyyController
 /xxx/yyy/zzz <slim3.rootPackage>.server.controller.xxx.yyy.ZzzController

コントローラを取得する前にリクエストURLパスの書き換えをすることもできます。
URLリライティングを使うには <slim3.rootPackage>.controller.AppRouter クラスを先に定義する必要があります。
HOT リローディングされるので、AppRouterを追加した後でもアプリケーションの再起動は不要です。

例:
package slim3.demo.controller;

import org.slim3.controller.router.RouterImpl;

public class AppRouter extends RouterImpl {

    public AppRouter() {
        addRouting("/_ah/mail/{address}", "/mail/receive?address={address}");
        addRouting(
            "/{app}/edit/{key}/{version}",
            "/{app}/edit?key={key}&version={version}");
        addRouting(
            "/{app}/delete/{key}/{version}",
            "/{app}/delete?key={key}&version={version}");
                addRouting(
            "/{app}/find/*path",
            "/{app}/find?path={path}");
    }
}

  • /_ah/mail/xxx@gmail.com へのリクエストは /mail/receive?address=xxx@gmail.com にルーティグされます。
  • /blog/edit/xxx/1 へのリクエストは /blog/edit?key=xxx&version=1 にルーティングされます。
  • /blog/delete/xxx/1  へのリクエストは /blog/delete?key=xxx&version=1 にルーティングされます。
  • /blog/find/xxx/yyy/zzz へのリクエストは /blog/find?path=xxx%2Fyyy%2Fzzz にルーティングされます(xxx/yyy/zzz はURLエンコードされます)。

  • ({xxx}) は "/" にはマッチしません、なぜなら "/" はパスのセパレータとして使用されているからです。
  • 全キャッチのプレースホルダー(*xxx)は、"/"を含む最後までの全ての文字にマッチするのでマッチ文字列の最後でなければなりません。

Next...

Request, Response and ServletContext へ続く

Comments