17-V4. ViewResolver → DispatcherServlet: ThymeleafView 반환
Thymeleaf를 쓰는 경우, ThymeleafViewResolver는 view name을 받아 ThymeleafView 인스턴스를 만들어 DispatcherServlet에 반환합니다.
이번 단계의 역할 — view name이 Thymeleaf 전용 View 객체로 구체화된다
문자열 view name을 Thymeleaf 전용 View 객체로 구체화하는 단계입니다.
호출 흐름 요약 — createView() 검사 → loadView() → 엔진·locale·contentType 주입
ThymeleafViewResolver.createView(...)가 view name을 검사합니다.loadView(viewName, locale)를 호출합니다.ThymeleafView인스턴스를 만들고 템플릿 엔진, locale, contentType 등을 주입합니다.- 완성된
ThymeleafView를 DispatcherServlet에 반환합니다.
호출 흐름 다이어그램 — ThymeleafViewResolver가 ThymeleafView를 만들어 돌려준다
sequenceDiagram
participant Resolver as ThymeleafViewResolver
participant View as ThymeleafView
participant DS as DispatcherServlet
Resolver->>Resolver: createView(viewName, locale)
Resolver->>View: loadView(viewName, locale)
Resolver-->>DS: ThymeleafView
핵심 코드 — createView(String, Locale)이 loadView()로 인스턴스를 만든다
// ThymeleafViewResolver.java
protected View createView(final String viewName, final Locale locale) throws Exception {
return loadView(viewName, locale);
}
// ThymeleafViewResolver.java
final AbstractThymeleafView viewInstance = BeanUtils.instantiateClass(getViewClass());
view.setTemplateEngine(getTemplateEngine());
view.setTemplateName(viewName);
return view;
코드 해설 — 이제 손에 남는 건 템플릿 이름이 아니라 실제 View 객체다
이 단계가 끝나면 DispatcherServlet은 더 이상 “템플릿 이름 문자열”이 아니라 실제 View 객체를 손에 쥐게 됩니다.
즉 이제부터는 해석이 아니라 렌더링 단계입니다.
설계 의도 — 엔진별 View 생성을 ViewResolver가 전담해 DispatcherServlet을 떼어놓는다
ViewResolver가 템플릿 엔진별 View 인스턴스 생성을 전담하게 해 DispatcherServlet을 템플릿 기술로부터 분리한 구조입니다.
다음 단계 연결 — 17-V5 render(model, request, response) 호출로 이어진다
다음 문서 17-V5에서는 DispatcherServlet이 반환받은 ThymeleafView에 render(model, request, response)를 호출하는 장면을 봅니다.
← 이전: 17-V3. DispatcherServlet → ViewResolver | 다음: 17-V5. DispatcherServlet → ThymeleafView