컨트롤러를 구현한다는 것은 클라이언트의 요청을 처리할 메소드를 구현한다는 것을 뜻한다.
과정은 다음과 같다.
1. @Controller 어노테이션을 클래스에 적용한다.
2. @RequestMapping 어노테이션을 이용해서 처리할 요청 경로를 지정한다.
3. 웹 브라우저의 요청을 처리할 메소드를 구현하고, 뷰 이름을 리턴한다.
++모델++
뷰에서 결과를 보여줄 때 필요한 데이터를 전달하기 위해 사용하는 것이 바로 모델이다.
컨트롤러는 뷰에서 필요로 하는 데이터를 모델에 담아서 전달하고, 뷰는 결과를 생성하는데 필요한 데이터를 모델에서 가져와 사용하게 된다.
컨트롤러는 다양한 방식으로 모델에 뎅터를 담을 수 있는데,
가장 간단한 방법은 Model을 파라미터로 추가하고, Model 파라미터에 데이터를 추가하는 것이다.
Model addAllAttribute(String attrName, Object attrValue)
: 이름이 attrname이고 값이 attrValue인 모델 속성을 추가한다.
Model addAllAttributes(Map<String,?> attributes)
: 맵의 <키, 값> 쌍들을 모델 속성 이름과 값으로 추가한다.
ModelMap 클래스는 Model 인터페이스와 동일한 메소드를 제공하고 있기 때문에, addAtribute()등의 메소드를 그대로 사용할 수 있다.
@RequestMaping을 이용한 요청 매핑
@RequestMapping 어노테이션 : 클라이언트는URL로 요청을 전송하는데, 요청 URL을 어떤 메소드가 처리할지 여부를 결정하는 역할을 한다.
컨트롤러와 메소드에 @RequestMapping 어노테이션을 모두 사용하면, 클래스에 적용한 값과 메소드에 적용한 값을 조합해서 매핑될 경로를 결정한다.
클래스에 @RequestMapping 어노테잇ㄴ을 적용하는 것은 컨트롤러 클래스가 특정 경로를 기준으로 그 하위 경로만을 처리한다는 것을 의미한다.
@Controller
public class EventController {
@RequestMapping(value="/event/create", method=RequestMethod.POST) //value = 경로 , method = HTTP전송방식
public String regist(Model model){ //데이터를 담아 뷰에 전달하기위해 Model을 파라미터로 추가.
List<Event> eventList = getOpenedEventList();
model.addAttribute('eventList', eventList); //데이터를 담아 뷰에 전달하기위해 Model파라미터에 데이터추가
return "member/registered";
}
}