✅ DispatcherServlet ✅ @Controller ✅ @RequestMapping ✅ @GetMapping ✅ @PostMapping

💡 DispatcherServlet
FrontController 의 역할을 수행한다.
- 부모 클래스에서 HttpServlet 을 상속 받아서 사용하고, 서블릿으로 동작한다.
- 스프링 부트는 DispacherServlet 을 서블릿으로 자동으로 등록하면서 모든 경로( urlPatterns="/" )에 대해서 매핑한다.
동작 순서
- 핸들러 조회 : 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다.
- 핸들러 어댑터 조회 : 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.
- 핸들러 어댑터 실행 : 핸들러 어댑터를 실행한다.
- 핸들러 실행 : 핸들러 어댑터가 실제 핸들러를 실행한다.
스프링은 이미 필요한 핸들러 매핑과 핸들러 어댑터를 대부분 구현해두었다. 개발자가 직접 핸들러 매핑과 핸들러 어댑터를 만드는 일은 거의 없다.
- ModelAndView 반환 : 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다.
- viewResolver 호출 : 뷰 리졸버를 찾고 실행한다.
- View 반환 : 뷰리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고,렌더링 역할을 담당하는 뷰객체를 반환한다.
- 뷰 렌더링 : 뷰를 통해서 뷰를 렌더링 한다.
💡 HandlerMapping
- RequestMappingHandlerMapping : 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용
- BeanNameUrlHandlerMapping : 스프링 빈의 이름으로 핸들러를 찾는다.
💡 HandlerAdapter
- RequestMappingHandlerAdapter : 애노테이션 기반의 컨트롤러인 @RequestMapping에서 사용
- HttpRequestHandlerAdapter : HttpRequestHandler 처리
- SimpleControllerHandlerAdapter : Controller 인터페이스(애노테이션X, 과거에 사용) 처리
💡 @RequestMapping
@Controller
public class SpringMemberFormControllerV1 {
@RequestMapping("/springmvc/v1/members/new-form")
public ModelAndView process() {
return new ModelAndView("new-form");
}
}
@Controller
스프링이 자동으로 스프링 빈으로 등록한다.
- 내부에 @Component 애노테이션이 있어서 컴포넌트 스캔의 대상이 됨
- 스프링 MVC에서 애노테이션 기반 컨트롤러로 인식한다.
@RequestMapping
요청 정보를 매핑한다.
- 해당 URL이 호출되면 이 메서드가 호출된다.
- 애노테이션을 기반으로 동작하기 때문에, 메서드의 이름은 임의로 지으면 된다.
- URL만 매칭하는 것이 아니라, HTTP Method도 함께 구분할 수 있다.
@RequestMapping(value = "/new-form", method = RequestMethod.GET)
@GetMapping , @PostMapping
위 코드를 더 편리하게 사용할 수 있는 어노테이션이다.
- @RequestMapping 애노테이션을 내부에 포함하고 있다.
강의 출처
[인프런 - 김영한] 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술