플레이 프레임워크와 스칼라

1.1 액션, 컨트롤러, Results

액션이란 무엇일까요?

플레이 어플리케이션에서 요청(request)하는 것은 대부분 액션이 처리합니다.

액션이란 기본적으로 자바 메서드입니다. 액션은 요청(request)의 매개변수를 처리하고, 클라이언트에 보낼 결과를 만들어냅다.

public static Result index() {
  return ok("Got request " + request() + "!");
}

액션은  play.mvc.Result 값을 반환합니다.  play.mvc.Result 값은 웹 클라이언트에게 보낼 HTTP 응답을 나타냅니다. 위 예제에서  oktext/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() {

댓글

댓글 본문