스프링 MVC는 기본적으로 프론트 컨트롤러패턴이다. 이 프론트 컨트롤러의 핵심적인 역할을 하는것이 DispatcherServlet이며 이것이 핸들러를 매핑하고 핸들러 어댑터를 조회하여 어댑터를 실행시킨다.
가장 우선순위가 높은 핸들러 매핑과 핸들러 어댑터는 RequestMappingHandlerMapping, RequestMappingHandlerAdapter이다.
@RequestMapping와 @Controller
@RequestMappingHandlerMapping은 스프링 빈 중에서 @RequestMapping 또는 @Controller가 클래스 레벨에 붙어 있는 경우에 매핑 정보로 인식한다. @RequestMapping의 경우 컴포넌트 스캔을 위해 @Component도 붙여줘야하지만, @Controller는 내부적으로 @Component도 선언이 되어 있기 때문에 Controller만 선언하는게 간편하다.
@Controller
public class VanillaController {}
@Component
@RequestMapping
public class VanillaController() {}
@RequestMapping
@RequestMapping의 경우 POST, GET 방식에 상관없이 다 처리가 가능하다. 하지만 POST는 POST만 GET은 GET으로만 처리하도록 하는게 좋은 설계이다. 스프링에서는 이를 간편하게 @GetMapping과 @PostMapping 어노테이션으로 제공한다.
@GetMapping("/new-form")
public String newForm() {}
@PostMapping("/save")
public String save(@RequestParam String username, @RequestParam int age);