-
Notifications
You must be signed in to change notification settings - Fork 2
UserGuide_kor
Milonga의 기본적인 사용법에 관한 내용이다.
Atmos는 전역변수로 선언된 객체로 Milonga를 사용하기 위한 시작점이다.
Spring MVC Handler를 선언하는 메서드이다. 요청받을 url과 url이 호출되면 실행하는 동작을 Javascript 메서드로 정의한다. 정의된 리턴 값은 Http Response Body에 실려 전달된다. 즉, Spring MVC에서의 @ResponseBody와 유사하게 동작한다.
Atmos.handler('/hello', function(req, res) {
return 'Hello Milonga!';
});
handler 메서드 인수
- url : 요청받을 url을 문자열로 정의한다.
- handler : 핸들러에 대한 요청 처리 시 호출되는 Javascript 메서드를 정의한다. 이 때 Javascript 메서드의 인수로 req와 res를 지정한다. req는 필수로 지정해야 하며 res는 필요없는 경우 생략할 수 있다. req와 res에 대한 자세한 내용은 이후 문서에서 설명한다.
req
req는 HTTP 요청을 추상화한 객체를 담고 있는 변수이다. 제공하는 기능은 다음과 같다.
- 요청 전달 값 가져오기 Request를 통해 전달된 값을 가져올 수 있다.
사용 예)
Atmos.handler('/get_attribute', function(req, res) {
var foo = req.foo;
});
- Object bindAs(className) Request를 통해 전달 받은 데이터를 특정 자바 클래스의 객체로 바인딩하여 리턴한다. className은 해당 자바 클래스의 full name을 뜻한다.
사용 예)
Atmos.handler('/binding_object', function(req, res) {
var foo = request.bindAs('com.sample.Foo');
return foo;
});
- Path Variable REST 기능으로 url에 특정 경로를 지정하여 변수처럼 사용할 수 있다. Spring MVC Handler의 @PathVariable과 유사한 기능이다.
사용 예)
Atmos.handler('/foo/{bar1}/{bar2}', function(req, res) {
return bar1 + bar2;
});
- Session 값 설정 HTTP Session 값을 설정할 수 있다.
사용 예)
Atmos.handler('/login', function(req, res) {
var userId = req.userId;
req.session.userId = userId;
});
res
res는 HTTP 응답을 추상화한 객체를 담고 있는 변수이다. 제공하는 기능은 다음과 같다.
- Redirect / Forward Http Redirect / Forward 기능이다. Redirect 또는 Forward 할 url 경로를 지정한다.
사용 예)
Atmos.handler('/search', function(req, res) {
res.redirect('http://www.google.com');
}.toView();
or
Atmos.handler('/search', function(req, res) {
}.redirect('http://www.google.com');
- Cookie * Http Cookie 값을 설정할 수 있다.
사용 예)
Atmos.handler('/login', function(req, res) {
var userId = req.userId;
res.cookie.mail = userId;
};
Atmos.handler(url, handler) 메서드는 toView() 메서드를 chaining을 통해 사용할 수 있다. toView(viewName) 메서드를 이용하여 응답 view 페이지를 정의할 수 있다. viewName 인수에 호출하려는 대상 페이지 이름을 문자열로 입력한다. 인수를 생략하는 경우 handler의 url에 따른 default 페이지가 호출된다. view 페이지에 대한 설정은 Spring MVC의 ViewResolver 설정을 따르게 된다.
사용 예)
Atmos.handler('/contents', function() {
// blog.jsp
}).toView('blog');
Atmos.handler('/contents', function() {
// contents.jsp
}).toView();
Milonga는 요청 URL의 확장자에 따라 적합한 형태의 응답을 반환할 수 있게 한다. Milonga가 제공하는 응답 형태는 JSON, XML, Plain Text의 3가지가 있다.
JSON
Atmos.handler('/user/{id}', function(req) {
var result = new Object();
result.id = id;
return result;
});
위와 같이 정의한 핸들러를 curl을 통해 호출해보자.
$ curl http://127.0.0.1:8080/{context-root}/user/foo.json
호출 결과는 아래와 같다.
{
"id" : "foo"
}
XML
XML을 리턴하기 위해서 XML을 표현할 수 있는 Java Bean 객체를 리턴해야 한다. 우선 XML을 표현하는 Java Bean 클래스가 필요하다. 아래는 예제 클래스이다.
package com.skp.milonga.externals.blog.model;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonProperty;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "blog")
public class Blog {
@JsonProperty("email")
private String id;
@JsonIgnore
private String title;
//@XmlAttribute
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
//@XmlAttribute
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
XML을 리턴할 수 있는 핸들러를 만들어보자.
Atmos.handler('/blog/{id}', function(req) {
var blog = new com.skp.milonga.externals.blog.model.Blog();
blog.setId(id);
blog.setTitle("This is " + id + "'s blog.");
return blog;
});
위와 같이 정의한 핸들러를 curl을 통해 호출해보자.
$ curl http://127.0.0.1:8080/{context-root}/blog/foo.xml
호출 결과는 아래와 같다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<blog>
<id>kmkim</id>
<title>This is kmkim's blog.</title>
</blog>