什么是 Action ?
大部分 Play 應(yīng)用的接收的請(qǐng)求由 action 處理.
一個(gè) action 基本上算是一個(gè) Java 方法, 這個(gè)方法處理請(qǐng)求參數(shù),然后產(chǎn)生一個(gè)結(jié)果發(fā)送給客戶端.
public Result index() {
return ok("Got request " + request() + "!");
}
action 返回一個(gè) play.mvc.Result 類型的對(duì)象,用于這個(gè)HTTP的響應(yīng)給web客戶端.這個(gè)例子中的 ok 構(gòu)造了一個(gè) 200 OK 的響應(yīng)碼 和 text/play類型的響應(yīng)body.
Controllers
controllers 只不過是 play.mvc.Controller 這個(gè)類的擴(kuò)展,多了幾組action方法.
package controllers;
import play.*;
import play.mvc.*;
public class Application extends Controller {
public Result index() {
return ok("It works!");
}
}
上面的代碼是一個(gè)最簡(jiǎn)單語法.定義了一個(gè)沒有參數(shù),返回值為 Result的action.
當(dāng)然action方法可以有參數(shù):
public Result index(String name) {
return ok("Hello " + name);
}
這個(gè)參數(shù)是 Router 從請(qǐng)求的 URL的path或 query string 中解析出來并填充的.
Result
讓我們從一個(gè)簡(jiǎn)單的 Result開始: 一個(gè)HTTP result 有一個(gè) 狀態(tài)嗎,一組HTTP header和一個(gè) body,他們會(huì)被發(fā)送給web 客戶端.
這個(gè)result的定義通過play.mvc.Result. 這個(gè) play.mvc.Result 類提供了一些方法來生成一些標(biāo)準(zhǔn)的HTTP result, 像 我們之前用的 ok 方法:
public Result index() {
return ok("Hello world!");
}
這里有一些創(chuàng)建result的例子:
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));
Result oops = internalServerError("Oops");
Result anyStatus = status(488, "Strange response type");
所有的這些方法可以在 play.mvc.Results 類中找到.
同樣 重定向 也是一個(gè)簡(jiǎn)單的 Result
重定向?yàn)g覽器到一個(gè)新的 URL 僅僅是另一個(gè)簡(jiǎn)單的result,然而這些result 類型是沒有響應(yīng)body的.
這里有一些方法可以幫助創(chuàng)建一個(gè)重定向的results:
public Result index() {
return redirect("/user/home");
}
默認(rèn)的是使用一個(gè) 303 SEE_OTHER 的響應(yīng)類型,但是你也可以更詳細(xì)的指明狀態(tài)嗎:
public Result index() {
return redirect("/user/home");
}