액션이란 무엇일까요?
플레이 어플리케이션에서 요청(request)하는 것은 대부분 액션
이 처리합니다.
액션이란 기본적으로 자바 메서드입니다. 액션은 요청(request)의 매개변수를 처리하고, 클라이언트에 보낼 결과를 만들어냅다.
public static Result index() { return ok("Got request " + request() + "!"); }
액션은 play.mvc.Result
값을 반환합니다. play.mvc.Result
값은 웹 클라이언트에게 보낼 HTTP 응답을 나타냅니다. 위 예제에서 ok
는 text/plain 응답 본문을 포함하는 200 OK 응답을 만들어냅니다.
컨트롤러(Controllers)
컨트롤러는 액션 메서드를 몇 개 포함하는 play.mvc.Controller
를 상속한 클래스입니다.
액션을 정의하는 가장 간단한 방법은 무엇일까요? Result
값을 반환하는 매개변수를 포함하지 않는 정적 메서드를 쓰는 것입니다:
public static Result index() {
return ok("It works!");
}
액션 메서드는 매개변수를 가질 수도 있습니다:
public static Result index(String name) {
return ok("Hello" + name);
}
Router
는 이 매개변수를 해석하고, 요청 URL에서 매개변수 값을 채웁니다. URL 경로 또는 URL 질의 문자열(query string)에서 매개변수 값을 추출합니다.
결과(Results)
간단한 result부터 살펴 봅시다 : HTTP 는 상태를 나타내는 코드(status code)를 만들어내며, 상태 코드는 웹 클라이언트에게 보낼 HTTP 헤더와 본문(body)로 구성되어 있습니다.
이런 결과값(result)은 play.mvc.Result
에 정의되어 있으며, play.mvc.Results
클래스는 표준 HTTP 결과값을 만들어주는 헬퍼를 제공합니다. 헬퍼의 예로는, 이전 섹션에서 사용했던 ok 메서드가 있습니다:
public static Result index() {
return ok("Hello world!");
}
다음은 몇 가지 result를 만들어내는 예입니다:
Result ok = ok("Hello world!");
Result notFound = notFound();
Result pageNotFound = notFound("<h1>페이지가 없습니다</h1>").as("text/html");
Result badRequest = badRequest(views.html.form.render(formWithErrors));
Result oops = internalServerError("웁스!");
Result anyStatus = status(488, "응답유형이 이상합니다.");
헬퍼는 play.mvc.Results
클래스 안에서 모두 볼 수 있습니다.
Redirects도 간단한 results입니다.
브라우저를 새로운 URL로 리다이렉트시키는 것은 다른 종류의 result입니다. 하지만 이러한 result 유형에는 응답의 본문(response body) 부분이 없습니다.
redirect result를 만들어내는데 도움을 주는 헬퍼들이 몇몇 있습니다:
public static Result index() {
return redirect("/user/home");
}
응답 유형 303 SEE_OTHER
를 사용하는 것이 기본입니다. 하지만 상태 코드를 좀더 구체적으로 지정해주어도 됩니다:
public static Result index() {