텍스트# 5. 스프링 MVC - 구조 이해
(이미지 출처:인프런 김영한 spring MVC-1 강의자료)
직접 만들어본 front controller 의 역할을 dispatcher servlet이 대신한다. 이 디스패처 서블릿이 스프링 MVC의 핵심이다.
동작 순서
1. 핸들러 조회: 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러)를 조회한다.
핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다.
핸들러 어댑터 실행: 핸들러 어댑터를 실행한다.
핸들러 실행: 핸들러 어댑터가 실제 핸들러를 실행한다.
ModelAndView 반환: 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다.
viewResolver 호출: 뷰 리졸버를 찾고 실행한다.
JSP의 경우: InternalResourceViewResolver 가 자동 등록되고, 사용된다.
View 반환: 뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를반환한다.
JSP의 경우 InternalResourceView(JstlView) 를 반환하는데, 내부에 forward() 로직이 있다.
뷰 렌더링: 뷰를 통해서 뷰를 렌더링 한다.
@Controller
@RequestMapping("/springmvc/v2/members")
public class SpringMemberControllerV2 {}
이런식으로 클래스 레벨에 @RequestMapping 애노테이션을 설정해두면 메소드 레벨에 있는 애노테이션과 조합이 된다.
메서드 레벨 @RequestMapping("/new-form")
-> /springmvc/v2/members/new-form
스프링 MVC는 개발자가 편리하게 개발할 수 있도록 수 많은 편의 기능을 제공한다. 실무에서는 지금부터 설명하는 방식을 주로 사용한다.
@PostMapping("/save")
public String save(
@RequestParam("username") String username,
@RequestParam("age") int age,
Model model) {
Model 파라미터
Model 파라미터를 받아서 사용한다.
ViewName 직접 반환
뷰의 논리 이름을 string 으로 반환한다.
@RequestParam 사용
스프링은 HTTP 요청 파라미터를 @RequestParam 으로 받을 수 있다.
@RequestParam("username") 은 request.getParameter("username") 와 거의 같은 코드라 생각하면 된다.
@RequestMapping @GetMapping, @PostMapping
@RequestMapping 은 url뿐만 아니라 method도 함께 구분할 수 있다.