스프링 MVC 구조에 대해서 알아본다
DispatcherServlet도 servlet이다.
스프링 부트가 자동으로 등록하는 핸들러 매핑과 핸들러 어댑터
1순위 - RequestMappingHandlermapping:
어노테이션 기반의 컨트롤러, @RequestMapping 어노테이션이 달린 핸들러를 찾는다.
2순위 - BeanNameUrlHanldlerMapping:
스프링 빈의 이름으로 핸들러를 찾는다.
1순위 - RequestMappingHandlerAdapter:
어노테이션 기반의 컨트롤러, @RequestMapping 어노테이션이 달린 핸들러를 처리할 수 있는 어댑터
2순위 - HttpRequestHandlerAdapter:
HttpRequestHandler 인터페이스를 구현한 핸들러를 처리할 수 있는 어댑터
3순위 - SimpleControllerHandlerAdapter:
Controller 인터페이스(어노테이션이 아닌 과거에 사용하던 Controller 인터페이스)를 구현한 핸들러를 처리할 수 있는 어댑터
1순위 - BeanNameViewResolver:
빈 이름으로 뷰를 찾아서 반환한다.(예: 엑셀 파일 생성 기능에 사용)
2순위 - InternalResourceViewResolver:
JSP를 처리할 수 있는 뷰를 찾아서 반환한다.
InternalResourceViewResolver 는 만약 JSTL 라이브러리가 있으면 InternalResourceView 를 상속받은 JstlView 를 반환한다.
JstlView 는 JSTL 태그 사용시 약간의 부가 기능이 추가된다.
다른 뷰는 실제 뷰를 렌더링하지만, JSP의 경우 forward() 통해서 해당 JSP로 이동(실행)해야 렌더링이 된다.
JSP를 제외한 나머지 뷰 템플릿들은 forward() 과정 없이 바로 렌더링 된다.
Thymeleaf 뷰 템플릿을 사용하면 ThymeleafViewResolver 를 등록해야 한다. 최근에는 라이브러리만 추
가하면 스프링 부트가 이런 작업도 모두 자동화해준다.