2013年12月25日水曜日

GAE + SBT + Unfiltered


GAEをSBTで使う記事を書きましたが、今回はリクエストの処理にUnfilteredを使ってみることにしました。

Unfilteredとは

Unfilteredとは、いろんなフレームワークや環境に使えるリクエスト処理するライブラリらしい。Servletにも対応しているので、GAEでも使えるようです。

Servletに対応しているパッケージは、unfiltered-filterのようなので、これを使ってみましょう。

build.sbtの設定

build.sbtに次の記述を追加すれば、Unfilteredを使えるようになります。

libraryDependencies += "net.databinder" %% "unfiltered-filter" % "0.7.1"

フィルターの作成

リクエストを処理するフィルターを作成してweb.xmlに登録します。

Unfilteredでは、Planというトレイトを継承してフィルターを作るようです。

src/main/scala/mypackage/Filter.scalaを作成します。

10 
11 
12 
package mypackage {

  import unfiltered.request._
  import unfiltered.response._

  class Filter extends unfiltered.filter.Plan {
    def intent = {
      case Path(Seg( x :: Nil )) => ResponseString( x )
    }
  }

}

intentというメソッドでリクエストを処理します。caseでパス名を取得して、パス名をそのままページに表示するようにしました。

詳しい使い方は、こちらを参照してください。

web.xmlの設定

作ったフィルターをweb.xmlに登録します。

10 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
  <filter>
    <filter-name>filter</filter-name>
    <filter-class>mypackage.Filter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

とりあえず、全てのリクエストはこのフィルターを通すように設定しました。

コンパイル

SBTのインタープリタに入り、packageと入力します。

> sbt
sbt> package

サーバの起動

appengine-java-sdk-***/bin/dev_appserver.cmd sbt/target/webapp
ブラウザでhttp://localhost:8080/hogeに行って、動作を確認してみましょう。ブラウザにhogeと表示されていれば成功です。

関連記事

0 件のコメント:

コメントを投稿