Sharable

システム&ウェブのシェアラブル

Lv.1 PlayフレームワークのControllersとResults [play framework2.0][java]

2012年3月22日

Playフレームワークにとってのつばさ君とみさき君(?)

それがControllersとResults。

理解のためには、Controllersはサーブレット、ResultsはHTTPResponse
捉えてもいいかも。あくまで位置づけが、ということですが。

ControllersとResultsについて。

Controllersとは

play.mvc.Controllerを継承したクラスのことで、サーブレット的なポジション。

このクラスの中で定義されるメソッドが、Actionと呼ばれる。

※1 Actionもクラスとして存在していました。すいません。通常はクラスとして意識しなくてもOKというニュアンスが正しそうです。Action composition

Actionとは、リクエストを処理するメソッドの名前。
Controllerクラス内に書かれたpublic staticなメソッドがActionとなる。
単にそう呼んでるだけで、strutsとかのActionとはちょっと違う。
あっちはクラス、こっちはメソッド。※1

Action(メソッド)は、引数も取れる。

public static Result index(String name) {
return ok("Hello" + name);
}

引数は、
クライアントからは、URLのパスで指定したり、クエリで指定する。
サーバーでは、パスやクエリをRouterというクラスが解釈してくれる。

Resultsとは

play.mvc.Result(s)は、HTTP resultのこと。HTTPヘッダーとBody情報を
クライアントに返すためのクラス。

Actionの戻り値として活躍する。

いろいろある。

※Redirectもできる。

//303 SEE_OTHERのこと
public static Result index() {
return redirect("/user/home");
}

303は、もうここにはコンテンツはないから、こっちに移動してね、という
恒久的なニュアンスが強いリダイレクト。

// 302(か307)のこと
public static Result index() {
return temporaryRedirect("/user/home");
}

302(307)は一時的に別のURLにリダイレクトさせるけど、そのうち元に
戻すよ、という意味合いが強い。

// いわゆる200
Result ok = ok("Hello world!");

// 見つかりませんでした
Result notFound = notFound();

// ページがありません。
Result pageNotFound
= notFound("<h1>Page not found</h1>").as("text/html");

// バリデーションの結果を返している。
// バリデーション失敗時の処理。
Result badRequest
= badRequest(views.html.form.render(formWithErrors));

// 404。内部エラー。
Result oops = internalServerError("Oops");

// ステータスを指定して返す
Result anyStatus
= status(488, "Strange response type");

などなど。状況によってレスポンスを簡単に変えられる仕組みになっている。

このエントリーをはてなブックマークに追加