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

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(メソッド)は、引数も取れる。

[java toolbar=”false”]
public static Result index(String name) {
return ok(“Hello” + name);
}
[/java]

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

Resultsとは

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

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

いろいろある。

※Redirectもできる。

[java light=true]
//303 SEE_OTHERのこと
public static Result index() {
return redirect(“/user/home”);
}
[/java]

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

[java light=true]
// 302(か307)のこと
public static Result index() {
return temporaryRedirect(“/user/home”);
}[/java]

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

[java toolbar=”false”]
// いわゆる200
Result ok = ok(“Hello world!”);

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

// ページがありません。
Result pageNotFound
= notFound(“

Page not found

“).as(“text/html”);

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

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

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

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