Deep Dive /Java Web /17-V4

17-V4. ViewResolver → DispatcherServlet: ThymeleafView 반환

Thymeleaf를 쓰는 경우, ThymeleafViewResolver는 view name을 받아 ThymeleafView 인스턴스를 만들어 DispatcherServlet에 반환합니다.


이번 단계의 역할

문자열 view name을 Thymeleaf 전용 View 객체로 구체화하는 단계입니다.


호출 흐름 요약

  1. ThymeleafViewResolver.createView(...)가 view name을 검사합니다.
  2. loadView(viewName, locale)를 호출합니다.
  3. ThymeleafView 인스턴스를 만들고 템플릿 엔진, locale, contentType 등을 주입합니다.
  4. 완성된 ThymeleafView를 DispatcherServlet에 반환합니다.

호출 흐름 다이어그램

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

핵심 코드

// 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;

코드 해설

이 단계가 끝나면 DispatcherServlet은 더 이상 “템플릿 이름 문자열”이 아니라 실제 View 객체를 손에 쥐게 됩니다. 즉 이제부터는 해석이 아니라 렌더링 단계입니다.


설계 의도

ViewResolver가 템플릿 엔진별 View 인스턴스 생성을 전담하게 해 DispatcherServlet을 템플릿 기술로부터 분리한 구조입니다.


다음 단계 연결

다음 문서 17-V5에서는 DispatcherServlet이 반환받은 ThymeleafViewrender(model, request, response)를 호출하는 장면을 봅니다.

← 이전: 17-V3. DispatcherServlet → ViewResolver | 다음: 17-V5. DispatcherServlet → ThymeleafView