Template 예제를 살펴보자.
HomeController.java
package sample.mvc.first;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Handles requests for the application home page.
*/
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value="/", method=RequestMethod.GET)
public String home() {
logger.info("Welcome home!");
return "home";
}
}
클래스이름에서도 알수 있듯이 MVC 구조에서 Controller 기능을 수행하는 클래스이다. 즉, 웹 요청을 받아서 비즈니스로직에 넘겨주는 역할을 하는 클래스이다.
사용자로부터 받는 요청은 URL 로 구분될 것이고 이를 처리하는 루틴과 매핑해주면 되겠다. 우선 이러한 처리를 할 수 있는 클래스임을 알리는 @Controller라는 에노테이션을 사용해야 한다.
@Controller에서는 컨트롤러 역할을 담당하는 메소드의 파라미터 개수와 타입, 리턴타입 등을 자유롭게 결정할 수 있다. (in toby spring 3.0)
컨트롤러 역할을 담당하는 메소드를 정의하는 방법은 @RequestMapping 에노테이션 사용하는 것이다.
@RequestMapping(value="/", method=RequestMethod.GET)
public String home() {
위 코드는 HTTP GET 메소드로 Root 컨텍스트를 요청하면 home이라는 메소드로 연결해달라고 정의하고 있다.
마지막으로 특정 값을 리턴하는데 이는 최종사용자에게 전달될 View를 결정하게된다.
return "home"
최종 사용자에게 home.jsp 결과페이지를 전달하게된다.
이는 servlet-context.xml 에 다음과 같은 ViewResolver 빈을 등록하여 가능해진다.
뷰 리졸버는 핸들러 매핑이 URL로 부터 컨트롤러를 찾아주는 것처럼, 뷰 이름으로 부터 사용할 뷰 오브젝트를 찾아준다. InternalResourceViewResolver는 뷰 리졸버를 지정하지 않았을 때 자동등록되는 디폴트 뷰 리졸버다. 주로 JSP를 뷰로 사용하고자 할 때 쓰인다. (in toby spring 3.0)
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>