argius note

プログラミング関連

Play最新版をビルドしてapplication.contextを試用

application.contextについて、次期バージョン(2.1?)でサポートされるかもしれないということなので、ビルドして試してみました。
サーブレットで言うところのコンテキストパスのようなものが使えるようになります。


最新版ソースは、バージョンが"2.1-SNAPSHOT"になっています。

application.context無しで

2.0では、routesで全てのパスにprefixを手動で付ければ、実現可能です。
それを自動で行うのが、application.contextの機能と言えます。

どのように実現しているか?

2.1-SNAPSHOTのソースを見てみます。

  • ${PLAY_HOME}/framework/src/play/src/main/scala/play/api/Application.scala

Applicationのroutesフィールド(val,type=Option[Router.Routes])を初期化する際に、application.contextに設定されたprefixを各routeの先頭に付加するようになっています。

2.1-SNAPSHOTをビルド

githubからzipでダウンロードして、マニュアルの"Building Play 2.0 from sources"に従ってビルドします。
framework/buildを使うので、Cygwin用に修正してから実行。いくつか意味不明な挙動もありましたが、無事Cygwinでビルドできました。
リビジョン?は461です。

動作確認

application.contextを設定してみましょう。設定するパスは、先頭が"/"になっていないと、"Invalid application context"エラーとなります。

  • conf/application.conf
application.context="/myapp"


わざと存在しないパスを指定すると、展開後のroutes一覧が見られます。

application.contextがprefixとして反映されているのが分かります。