Servlet API를 기반으로 구축된 웹 프레임워크
정식 명칭은 Spring Web MVC이지만, Spring MVC로 주로 알려져있다.
Spring Framework가 제공하는 DI, AOP 뿐 아니라, WEB 개발을 위한 기능을 제공
DispatcherServlet(FrontController)를 중심으로 디자인 되었으며, View Resolver, Handler, Mapping, Controller와 같은 객체와 함께 요청을 처리하도록 구성되어 있다.
다른 프레임워크와 마찬가지로 Front Controller Pattern으로 구성됨.
중심이 되는 DispatcherServlet(front controller)은 요청 처리를 위한 기능을 제공
-위에서 작성안하고 남은 것(웹과 직접적으로 관련 없는?) (DAO 등)을 Root WebApplicationContext에 작성한다.
DispatcherServlet -> 클라이언트 요청 처리 (요청 및 처리 결과 전달)
HandlerMapping -> 요청을 어떤 Controller가 처리할 지 결정
Controller -> 요청에 따라 수행할 메서드를 선언하고, 요청 처리를 위한 로직 수행 (비즈니스 로직 호출 (Service 호출))
ModelAndView(바구니) -> 요청처리를 하기 위해서 필요한 혹은 그 결과를 저장하기 위한 객체
ViewResolver -> Controller에 선언된 view이름을 기반으로 결과를 반환할 View 결정
View -> 응답화면 생성
클라이언트 요청이 들어오면 DispatcherServlet이 받는다.
HandlerMapping이 어떤 Controller가 요청을 처리할 지 결정
DispatcherServlet은 Controller에 요청을 전달
Controller는 요청을 처리
결과(요청 처리를 위한 data, 결과를 보여줄 view의 이름)를 ModelAndView에 담아 반환
ViewResolver에 의해서 실제 결과를 처리할 View를 결정하고 반환
결과를 처리할 View에 ModelAndView 전달
DispatcherServlet은 View가 만들어낸 결과를 응답
DispatcherServlet 생성
web.xml (pjt/src/main/webapp/WEB-INF/web.xml)
servlet-context.xml(/WEB-INF/spring/appServlet/servlet-context.xml)
MVC 구성요소 bean 등록 (handler mapping, view resolver, controller)
@RequestMapping
URL을 클래스 또는 특정 핸들러(메서드)에 매핑
일반적으로 클래스에 작성하는 @RequestMapping은 요청 경로, 혹은 요청 패턴에 매칭
메서드 Annotation은 요청 방식 (GET, POST) 등으로 범위를 좁혀준다.
Controller Handler return value - view 이름 지정
ModelAndView, String
Controller Handler return value - view 이름 암시적 지정
암시적으로 view가 결정되는 경우 (RequestToViewNameTranslator에 의해 결정됨)
Controller Handler return value - redirect
redirect를 위해서 사용
view 이름에 "redirect:" 접두어를 붙임
Controller Handler return value - @ResponseBody
View 렌더링이 아니라, 데이터(XML, JSON 등)를 응답하기 위해서 사용
@RestController와 함게 사용됨. (추후 학습)
DAO, Service Scan