什么是 Action ?
大部分 Play 应用的接收的请求由 action 处理.
一个 action 基本上算是一个 Java 方法, 这个方法处理请求参数,然后产生一个结果发送给客户端.
public Result index() {
return ok("Got request " + request() + "!");
}
action 返回一个 play.mvc.Result 类型的对象,用于这个HTTP的响应给web客户端.这个例子中的 ok 构造了一个 200 OK 的响应码 和 text/play类型的响应body.
Controllers
controllers 只不过是 play.mvc.Controller 这个类的扩展,多了几组action方法.
package controllers;
import play.*;
import play.mvc.*;
public class Application extends Controller {
public Result index() {
return ok("It works!");
}
}
上面的代码是一个最简单语法.定义了一个没有参数,返回值为 Result的action.
当然action方法可以有参数:
public Result index(String name) {
return ok("Hello " + name);
}
这个参数是 Router 从请求的 URL的path或 query string 中解析出来并填充的.
Result
让我们从一个简单的 Result开始: 一个HTTP result 有一个 状态吗,一组HTTP header和一个 body,他们会被发送给web 客户端.
这个result的定义通过play.mvc.Result. 这个 play.mvc.Result 类提供了一些方法来生成一些标准的HTTP result, 像 我们之前用的 ok 方法:
public Result index() {
return ok("Hello world!");
}
这里有一些创建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 类中找到.
同样 重定向 也是一个简单的 Result
重定向浏览器到一个新的 URL 仅仅是另一个简单的result,然而这些result 类型是没有响应body的.
这里有一些方法可以帮助创建一个重定向的results:
public Result index() {
return redirect("/user/home");
}
默认的是使用一个 303 SEE_OTHER 的响应类型,但是你也可以更详细的指明状态吗:
public Result index() {
return redirect("/user/home");
}