일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 그라파나
- Play2 로 웹 개발
- 하이브리드앱
- 파이썬 강좌
- Adapter 패턴
- 파이썬
- 스칼라
- 파이썬 머신러닝
- 파이썬 동시성
- play2 강좌
- 파이썬 데이터분석
- Play2
- Hyperledger fabric gossip protocol
- Golang
- 안드로이드 웹뷰
- 스칼라 강좌
- 주키퍼
- 스위프트
- Actor
- hyperledger fabric
- 이더리움
- Akka
- 엔터프라이즈 블록체인
- 하이퍼레저 패브릭
- 플레이프레임워크
- 스칼라 동시성
- play 강좌
- akka 강좌
- CORDA
- 블록체인
- Today
- Total
HAMA 블로그
[Play2] Actions, Controllers and Results 이란 [번역] 본문
[Play2] Actions, Controllers and Results 이란 [번역]
[하마] 이승현 (wowlsh93@gmail.com) 2016. 9. 28. 15:24Actions, Controllers and Results
Action 이란 무엇인가?
스프링에서 컨트롤러 함수의 예가 다음과 같은 모습을 취하는 반면
@RequestMapping(method = RequestMethod.GET)
public String printHello(ModelMap model) {
model.addAttribute("message", "Hello Spring MVC Framework!");
return "hello";
}
스칼라언어 기반 Play 프레임워크 웹개발에서는 (위의 자바 예와 동일한 내용의 예가 아닙니다)
def doSomething = Action{
Ok.apply(views.html.index("Hi there"))
}
이런 모양새로 이루어지는데 여기서 Action 이 무엇일까요?
위의 예는 다음과 같이 풀어지게 되는데요
def doSomething: Action[AnyContent] = Action.apply({
Ok.apply(views.html.index("Hi there"))
})
위의 apply 메소드의 정의는 apply(block: => Result) 이라는 인자없고 리턴이 Result 인 익명의 함수가 들어가게 됩니다. 다시 말해서 Action.apply 함수의 apply() 는 생략가능이고 apply 함수내에는 인자가 없고 Result 를 리턴하는 익명함수가 들어가네요.
이 함수 말이죠.
{
Ok.apply(views.html.index("Hi there"))
}
그리고 doSomething 메소드는 Action[AnyContent] 클래스의 인스턴스를 리턴합니다.
액션은 무엇인가?
Play2 애플리케이션이 수신한 대부분의 요청은 액션에 의해 처리됩니다.
play.api.mvc.Action은 기본적으로 요청을 처리하고 클라이언트에 보낼 결과를
생성하는 (play.api.mvc.Request => play.api.mvc.Result) 함수입니다.
val echo = Action { request =>
Ok("Got request [" + request + "]")
}
액션은 웹 클라이언트에 보낼 HTTP 응답을 나타내는 play.api.mvc.Result 값을 반환합니다.
이 예에서 Ok는 text / plain 응답을 포함하는 200 OK 응답을 생성합니다.
액션 만들기
play.api.mvc.Action 동반자 객체는 Action 값을 생성하는 여러 가지 도우미 메서드를 제공합니다.
첫 번째 간단한 방법은 결과를 반환하는 표현식 블록(익명함수)을 인수로 취하는 것입니다.
Action {
Ok("Hello world")
}
이것은 액션을 만드는 가장 간단한 방법이지만 들어오는 Request 에 대한 자세한 참조를 얻지는 못합니다.
따라서 Request => Result 함수를 인수로 취하는 또 다른 Action 빌더가 있습니다.
Action { request =>
Ok("Got request [" + request + "]")
}
요청 매개 변수를 암시적으로 표시하면 필요로 하는 다른 API에서 암시적으로 사용할 수 있습니다.
Action { implicit request =>
Ok("Got request [" + request + "]")
}
Action 값을 만드는 마지막 방법은 추가 BodyParserargument를 지정하는 것입니다.
Action(parse.json) { implicit request =>
Ok("Got request [" + request + "]")
}
Body 파서는 이 설명서 뒷부분에서 다룰 것입니다. => body parser 이해하기
지금은 기본 Any Content body 파서를 사용한다는 것을 알면 됩니다.
컨트롤러는 액션 생성기이다.
컨트롤러는 Action 값을 생성하는 싱글톤 객체일 뿐 입니다. 액션 생성기를 정의하는 가장 간단한
사용 사례는 액션 값을 반환하는 매개 변수가 없는 메소드입니다.
package controllers
import play.api.mvc._
class Application extends Controller {
def index = Action {
Ok("It works!")
}
}
물론 액션 생성기 메소드는 매개 변수를 가질 수 있으며 이러한 매개 변수는 액션 클로저에 의해 캡처 될 수 있습니다.
def hello(name: String) = Action {
Ok("Hello " + name)
}
단순 results
지금은 단순한 결과에만 관심이 있습니다. 상태 코드, HTTP 헤더 세트 및 웹 클라이언트로 보낼 본문이 있는 HTTP 결과. 이 결과는 play.api.mvc.Result에 의해 정의됩니다
def index = Action {
Result(
header = ResponseHeader(200, Map(CONTENT_TYPE -> "text/plain")),
body = Enumerator("Hello world!".getBytes())
)
}
물론 위의 예제에서 Ok result와 같은 일반적인 결과를 만들 수 있는 여러 도우미가 있습니다.
def index = Action {
Ok("Hello world!")
}
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")
이러한 헬퍼는 모두 play.api.mvc.Results 특성 및 동반자 개체에서 찾을 수 있습니다.
Redirects 또한 simple results 이다.
브라우저를 새로운 URL로 리디렉션하는 것은 다른 종류의 간단한 Result 타입일 뿐 입니다. 그러나
이 결과 타입은 응답 바디를 사용하지는 않습니다.
리다이렉션 결과를 만들 수있는 여러 도우미가 있습니다.
def index = Action {
Redirect("/user/home")
}
기본값은 303 SEE_OTHER 응답 유형을 사용하는 것이지만 필요한 경우보다 구체적인 상태
코드를 설정할 수도 있습니다.
def index = Action {
Redirect("/user/home", MOVED_PERMANENTLY)
}
'PlayFramework2' 카테고리의 다른 글
[Play2] DI (의존성 주입) (0) | 2016.10.10 |
---|---|
[Play2] Cookie 와 Session (0) | 2016.09.29 |
[Play2] Filter (번역) (0) | 2016.09.28 |
[Play2] Action composition (번역) (0) | 2016.09.28 |
Play2.4 로 웹 개발 시작하기 - (4) 로깅처리 (0) | 2016.09.27 |