Scalaの一番有名なフレームワークはPlay Frameworkである。
Play Frameworkに対して簡単に勉強しようと。
特に話がない内容はPlayFramework公式ホームページの内容を基に作成。
Actions, Controllers and Results
routes
// routes
GET / controllers.HomeController.index
http://localhost:9000
に接続するとroutes
によって、HomeControllerのindex
関数が実行される。
Action(Controllers)
ほとんどのRequestはAction
によってハンドルされる。
play.api.mvc.Action
は基本的に(play.api.mvc.Request => play.api.mvc.Result)
関数である。
Requestをハンドルした後、処理の結果をClientに返す。
// HomeController.scala
def index = Action {
implicit request => Ok(views.html.index())
}
index
関数はRequestに対して、200OKとindex.scala.html
を返す。
Templates(Views)
// index.scala.html
@()
@main("title") {
<h1>Index Page</h1>
This is a index page.
}
// main.scala.html
@(title: String)(content: Html)
<!DOCTYPE html>
<html>
<head><title>@title</title></head>
<body>@content</body>
</html>
index.scala.html
は、mail.scala.html
のテンプレートに書く内容が書いてある。
Simple Result
HTTPのResultはSTATUS CODEと一緒に出る。
HTTPのHeaderとBodyを作成して、Clientに返してみようと。
Resultはplay.api.mvc.Result
に定義されている。
import play.api.http.HttpEntity
import akka.util.ByteString
def index = Action {
implicit request => Result(
header = ResponseHeader(200, Map.empty),
body = HttpEntity.Strict(ByteString("Hello world!"), Some("text/plain"))
)
}
様々なResultがあるので、確認を。
val ok = Ok("Hello world!")
val notFound = NotFound
val pageNotFound = NotFound(<h1>Page not found</h1>)
val badRequest = BadRequest(views.html.form(formWithErrors))
val oops = InternalServerError("Oops")
val anyStatus = Status(488)("Strange response type")
Redirect
def index = Action {
implicit request => Redirect("/", MOVED_PERMANENTLY)
}