챕터 5 정리
Spring MVC 기능 정리(결과물, 앞으로 이렇게 쓰면 됨)
- Model 파라미터를 사용하자 : HttpServletRequest 이런걸로 리턴 안해줘도 된다
- ViewName 직접 반환 : 뷰의 논리 이름으로 반환하면 알아서 물리이름을 찾아 변환해 랜더링한다.
- 기존 ModleAndView 객체로 반환하지 않아도 됨
- @RequestMapping : 어노테이션 기반의 핸들러+맵퍼 사용이 가능하다
- @GetMapping, @PostMapping은 http 메서드까지 특정한것일뿐, Reques
- @Controller 어노테이션
- 스프링이 자동으로 스프링 빈으로 등록한다. (내부에 @Component 애노테이션이 있어서 컴포넌트스캔됨)
스프링 MVC 내부
-
스프링 부트가 자동 등록하는 뷰 리졸버
-
가장 중요한 두가지는 맵핑, 어댑터
- 맵핑 : URI 주소를 누가 처리해줄껀지 찾아주는 아이
- 어댑터 : 핸들러를 실행할 수 있는 어댑터, 핸들러 구현이 다 다르므로 구현체마다의 어댑터가 필요하다
맵핑 동작과정
- HandlerMapping 을 순서대로 실행해서, 핸들러를 찾는다
- 먼저 Bean이름으로 핸들러를 찾아야 하기 때문에 이름 그대로 빈 이름으로 핸들러를 찾아주는
BeanNameUrlHandlerMapping 가 실행에 성공하고 핸들러인 OldController 를 반환
어댑터 동작과정
- 조회 - 어댑터가 핸들러 호출 - 어댑터 동작
- 자세한건 117페이지
스프링 MVC 동작 순서 : DispacherServlet.doDispatch()
- 컨트롤러를 찾아서
- 컨트롤러(핸들러) 어댑터 조회해서 실행시킬수 있는 어댑터를 찾아내서
- 핸들러(컨트럴ㄹ) 어댑터를 실행
- 어댑터가 실제 핸들러를 실행한다.
- ModelAndView 반환: 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해 리턴
- viewResolver 호출: 뷰 리졸버를 찾고 실행
- JSP의 경우: InternalResourceViewResolver 가 자동 등록되고, 사용된다.
- View 반환: 뷰 리졸버는 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환
- JSP의 경우 InternalResourceView(JstlView) 를 반환하는데, 내부에 forward() 로직이 있다.
- 뷰 렌더링: 뷰를 통해서 뷰를 렌더링 한다.
결론
- 개발자가 편하게 하기 위해서 프레임워크를 잘 만들어놨다
- 개발하기 어렵게 서비스를 만들면 유저들은 편하다
- 위에 "스프링 MVC 동작 순서" 를 개발하기 편하고 확장하기 쉽게 구현해놓은게 스프링 mvc이다