View Resolvers

2024. 10. 15. 16:07·Web on Servlet Stack

https://sundaland.tistory.com/372

 

[ ▶ View Resolvers ]

View Resolvers는 Spring MVC에서 클라이언트 요청에 대한 응답을 렌더링할 뷰(HTML, JSON, JSP 등)를 결정하는 역할을 한다. Spring MVC는 다양한 뷰 기술을 지원하며, 이를 위해 ViewResolver를 사용하여 요청이 어떤 뷰로 렌더링될지를 결정한다.

ViewResolver는 컨트롤러가 반환하는 뷰 이름을 실제 뷰로 매핑한다. 예를 들어, 컨트롤러에서 "home"이라는 뷰 이름을 반환하면, 뷰 리졸버는 해당 이름을 실제 뷰 파일(home.jsp 또는 home.html)과 연결한다.

 

[ ▷ View Resolvers 구성 ]

Spring MVC는 뷰 리졸버 구성을 쉽게 구성할 수 있다. 아래 Java 설정 예시에서는 JSP와 JSON 렌더링을 위한 Content Negotiation 뷰 리졸버를 설정한다. Content Negotiation은 클라이언트가 요청한 콘텐츠 타입(JSON, HTML 등)에 따라 적절한 뷰를 선택할 수 있도록 도와준다.

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        // JSON 렌더링을 위한 Content Negotiation 뷰 리졸버
        registry.enableContentNegotiation(new MappingJackson2JsonView());

        // JSP 뷰 리졸버
        registry.jsp();
    }
}
  1. ViewResolverRegistry: Spring에서 제공하는 ViewResolver를 쉽게 등록할 수 있도록 도와주는 클래스이다. ViewResolverRegistry는 뷰 리졸버를 간단히 추가하고 설정할 수 있는 다양한 메서드를 제공한다.
  2. enableContentNegotiation(new MappingJackson2JsonView()): 이 메서드는 Content Negotiation을 활성화하여 클라이언트가 요청한 콘텐츠 타입에 따라 응답을 JSON으로 렌더링할 수 있도록 설정한다. MappingJackson2JsonView는 Jackson을 사용하여 Java 객체를 JSON으로 변환하는 뷰이다.
  3. jsp(): JSP 뷰 리졸버를 등록합니다. 이는 기본적으로 JSP 파일을 찾고 렌더링할 수 있도록 설정하며, JSP 파일은 일반적으로 /WEB-INF/views/ 경로에 위치한다. Spring은 뷰 이름에 .jsp 확장자를 자동으로 추가하여 해당 파일을 찾는다.

 

[ ▷ Thymeleaf 뷰 리졸버 등록 ]

타임리프는 HTML 템플릿을 사용하여 동적 웹 페이지를 렌더링하는 데 자주 사용되는 뷰 기술이다. 타임리프를 Spring MVC와 함께 사용하려면 타임리프 뷰 리졸버를 등록해야 다. 타임리프를 설정하려면 ThymeleafViewResolver와 SpringTemplateEngine을 구성해야 한다.

 

▼ JSP와 함께 타임리프 뷰 리졸버를 설정하는 방법

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        return templateEngine;
    }

    @Bean
    public ThymeleafViewResolver thymeleafViewResolver() {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(templateEngine());
        viewResolver.setOrder(1);  // Thymeleaf 뷰 리졸버의 우선순위 설정
        viewResolver.setViewNames(new String[] {"*.html"});  // .html 파일만 처리하도록 설정
        return viewResolver;
    }

    @Bean
    public ServletContextTemplateResolver templateResolver() {
        ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
        templateResolver.setPrefix("/WEB-INF/templates/");  // 템플릿 파일의 경로
        templateResolver.setSuffix(".html");  // 템플릿 파일 확장자
        templateResolver.setTemplateMode("HTML");
        templateResolver.setCharacterEncoding("UTF-8");
        return templateResolver;
    }

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        // 타임리프 뷰 리졸버를 등록
        registry.viewResolver(thymeleafViewResolver());

        // JSP 뷰 리졸버
        registry.jsp();
    }
}

 

[ ▷ 타임 리프 설정 설명 ]

△ SpringTemplateEngine

타임리프 템플릿 엔진을 생성합니다. 이 엔진은 타임리프 템플릿 파일을 처리하는 데 사용된다. templateResolver()를 통해 템플릿 리졸버를 설정하고 타임리프 엔진에 연결한다.

 

△  ThymeleafViewResolver

타임리프 뷰 리졸버를 설정다. 이 리졸버는 .html 확장자를 가진 파일을 처리하며, 타임리프를 사용하여 HTML 템플릿을 렌더링한다.

  • setOrder(1): 뷰 리졸버의 우선순위를 설정한다. 숫자가 작을수록 우선순위가 높다.
  • setViewNames("*.html"): 타임리프가 처리할 뷰 파일 확장자를 .html로 지정한다.

 

△ ServletContextTemplateResolver

타임리프 템플릿 리졸버이다. 템플릿 파일이 위치한 경로(prefix), 파일 확장자(suffix), 템플릿 모드 등을 설정합니다. UTF-8 인코딩을 사용하여 HTML 템플릿을 렌더링한다.

 

△ configureViewResolvers(ViewResolverRegistry registry)

타임리프 뷰 리졸버와 JSP 뷰 리졸버를 모두 등록한다. 타임리프 뷰 리졸버가 먼저 등록되었으므로 .html 요청은 타임리프가 처리하고, 그 외에는 JSP 뷰 리졸버가 처리하게 된다.

 

[ ▷ 요약 ]

  • iew Resolvers는 Spring MVC에서 요청을 적절한 뷰로 매핑하는 중요한 구성 요소이다.
  • Content Negotiation을 사용하여 클라이언트가 요청한 콘텐츠 타입에 따라 JSON 또는 HTML 응답을 동적으로 렌더링할 수 있다.
  • JSP 뷰 리졸버는 JSP 파일을 처리하고, 타임리프 뷰 리졸버는 타임리프 템플릿을 사용하여 HTML 파일을 처리할 수 있다.
  • 타임리프와 JSP를 모두 사용할 경우, 각 뷰 리졸버의 우선순위를 설정하여 요청한다.

'Web on Servlet Stack' 카테고리의 다른 글

Annotated Controllers[1]  (1) 2024.10.16
Path Matching  (0) 2024.10.15
View Controllers  (0) 2024.10.15
Content Types  (1) 2024.10.15
Validation  (0) 2024.10.15
  1. [ ▶ View Resolvers ]
  2. [ ▷ View Resolvers 구성 ]
  3. [ ▷ Thymeleaf 뷰 리졸버 등록 ]
  4. [ ▷ 타임 리프 설정 설명 ]
  5. [ ▷ 요약 ]
'Web on Servlet Stack' 카테고리의 다른 글
  • Annotated Controllers[1]
  • Path Matching
  • View Controllers
  • Content Types
GLaDiDos
GLaDiDos
GLaDiDos의 티스토리GLaDiDos 님의 블로그입니다.
GLaDiDos
GLaDiDos의 티스토리
GLaDiDos
전체
오늘
어제
  • 분류 전체보기 (207)
    • 자바 튜토리얼 (19)
    • 스프링 프레임워크 (15)
      • IoC (Inversion of Control) (7)
    • Toby Spring 3.1 (4)
    • 테스트 주도 개발 (TDD) (4)
    • 디자인 패턴 (1)
    • 깃 (Git) (1)
    • Reflection (10)
    • 스프링 AOP (15)
    • JPA (Java Persistence API) (10)
    • 네트워크 (5)
    • Spring Boot (48)
      • Annotations (3)
      • Auto-Configuration (12)
      • Spring Data JPA (28)
      • Spring Security (4)
    • Apache Tomcat (7)
    • Web on Servlet Stack (29)
    • 자바 (4)
    • 개인 코드 분석 (9)
    • Spring Security in Action (11)
    • AWS (Amazon Web Service) (2)
      • EC2 (2)
    • 도커 (Docker) (0)
    • 리눅스 (1)
    • 스프링 마이크로서비스 (8)
    • 마이크로서비스 아키텍처 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

링크

공지사항

인기 글

태그

최근 댓글

최근 글

hELLO· Designed By정상우.v4.6.1
GLaDiDos
View Resolvers
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.