Javaの常識を変えるらしいPlay Framework~チュートリアルの3~
!これはJavaの常識を変えるらしいPlay Framework~チュートリアルの3~の続きです。
httpルーティング
だいぶチュートリアルらしくなってまいりました。ルーティングとはなんぞやとかはおググりください。
Playでは/project/conf/routesなるファイルにルーティングを追加していくらしいです。では実際にみてよう。
# Routes # This file defines all application routes (Higher priority routes first) # ~~~~ # Home page GET / controllers.Application.index() # Map static resources from the /public folder to the /assets URL path GET /assets/*file controllers.Assets.at(path="/public", file)
ほーん、なるほど。
/にGETリクエストが飛んできたら controllersパッケージのApplicationクラスのindexっていうメソッドを呼び出すらしい。
では該当ファイル(/project/app/controllers/Applicationを見てよう
package controllers; import play.*; import play.mvc.*; import views.html.*; public class Application extends Controller { public static Result index() { return ok(index.render("Your new application is ready.")); } }
対応するメソッドがあった。
index.render()
はよくわかりませんが、引数のStringを何かしらで描画するんでしょう。
じゃあなんか適当なの追加してみよう。GETで/testにリクエストしたら同じものが表示されるようにするにはroutesファイルに
GET /test controllers.Application.index()
で行ける気がする。
実際できるのでお試しを
ほかにも引数とか渡したいときはこんなふうにしてみればいい routesファイル
GET /show/:id controllers.Application.show(id: Int)
Application.java
public static Result show(int id) { return ok(index.render("Your new application is ready." + id)); }
わかりやすい。癖で型をInt
ではなくint
にしそうになるのは気をつけねば、ここらへんはScalaにならっているらしい。
あとこの引数は正規表現でも行けるみたい 優先順位とかは先に宣言されたものになるらしいので気をつけていきたい
リバースルーティング
リバースルーティング・・・?なんぞ?Web初心者にはわからないことがいっぱいだ。
redirectさせたいときとかPlayではredirect(String uri)
を使うんだけど、このURIが変更されたらめんどくさい。
そんなときにリバースルーティングを使えば柔軟に行けそう。
一言で言えば逆引き、コントローラーに対応するURI返してくれる便利なやつ。
さっきの例で/look/:idにGETリクエストしたら/show/:idにリダイレクトしたいって場合を考える。
まずroutesファイルに
GET /look/:id controllers.Application.look(id: Int)
public static Result look(int id) { return redirect("/play/show/" + id); }
で、要求は満たせるんだけど、showがリファクタリングとかされると動かなくなるのでApplication.javaをリバースルーティング使って
public static Result look(int id) { return redirect(controllers.routes.Application.show(id)); }
ってすることで/show/:idが/hoge/:idになったとしてもURIを逆引きしてくれる感じ。
ここでcontrollers.routes.Application.show(id)
ってなってるのはおまじないって書いてもいいんだけど、公式を見るといいと思います。
やっぱJavaはたのしいなあ