1. 개요

Spring 웹 프레임 워크는 MVC (Model-View-Controller) 패턴을 기반으로 구축되어 애플리케이션에서 문제를 쉽게 분리 할 수 ​​있습니다. 이를 통해 잘 확립 된 JSP 기술에서 다양한 템플릿 엔진에 이르기까지 다양한보기 기술을 사용할 수 있습니다.

이 기사에서는 Spring과 함께 사용할 수있는 주요 템플릿 엔진, 구성 및 사용 예를 살펴 보겠습니다.

2. Spring View 기술

Spring MVC 애플리케이션의 관심사가 한 뷰 기술에서 다른 뷰 기술로 완전히 분리되어 있다는 점을 감안할 때 주로 구성 문제입니다.

각 뷰 유형을 렌더링하려면 각 기술에 해당 하는 ViewResolver을 정의해야합니다 . 이는 일반적으로 JSP 파일을 반환하는 것과 동일한 방식으로 @Controller 매핑 메서드에서 뷰 이름을 반환 할 수 있음을 의미 합니다.

다음 섹션에서는 Java Server Pages 와 같은 더 전통적인 기술 과 Spring에서 사용할 수있는 기본 템플릿 엔진 인 Thymeleaf , Groovy , FreeMarker, Jade에 대해 살펴 보겠습니다 .

각각에 대해 표준 Spring 애플리케이션과 Spring Boot를 사용하여 빌드 된 애플리케이션 모두에서 필요한 구성을 살펴 보겠습니다 .

3. 자바 서버 페이지

JSP는 Java 애플리케이션에서 가장 널리 사용되는보기 기술 중 하나이며 Spring에서 즉시 지원됩니다. JSP 파일을 렌더링하기 위해 일반적으로 사용되는 ViewResolver Bean 유형 InternalResourceViewResolver입니다 .

@EnableWebMvc
@Configuration
public class ApplicationConfiguration implements WebMvcConfigurer {
    @Bean
    public ViewResolver jspViewResolver() {
        InternalResourceViewResolver bean = new InternalResourceViewResolver();
        bean.setPrefix("/WEB-INF/views/");
        bean.setSuffix(".jsp");
        return bean;
    }
}

다음으로 / WEB-INF / views 위치 에서 JSP 파일 생성을 시작할 있습니다.

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<html>
    <head>
        <meta http-equiv="Content-Type" 
          content="text/html; charset=ISO-8859-1">
        <title>User Registration</title>
    </head>
    <body>
        <form:form method="POST" modelAttribute="user">
            <form:label path="email">Email: </form:label>
            <form:input path="email" type="text"/>
            <form:label path="password">Password: </form:label>
            <form:input path="password" type="password" />
            <input type="submit" value="Submit" />
        </form:form>
    </body>
</html>

Spring Boot 애플리케이션에 파일을 추가하는 경우 ApplicationConfiguration 클래스 대신 application.properties 파일 에서 다음 속성을 정의 할 수 있습니다 .

spring.mvc.view.prefix: /WEB-INF/views/
spring.mvc.view.suffix: .jsp

이러한 속성을 기반으로 Spring Boot 는 필요한 ViewResolver를 자동 구성합니다 .

4. 타임 리프

Thymeleaf 는 HTML, XML, 텍스트, JavaScript 또는 CSS 파일을 처리 할 수있는 Java 템플릿 엔진입니다. 다른 템플릿 엔진과 달리 Thymeleaf 는 템플릿을 프로토 타입으로 사용할 수 있습니다. 즉, 정적 파일로 볼 수 있습니다.

4.1. Maven 의존성

Thymeleaf 를 Spring과 통합하려면 thymeleafthymeleaf-spring4 의존성 을 추가해야합니다 .

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>3.0.11.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.11.RELEASE</version>
</dependency>

Spring 4 프로젝트가 있다면 thymeleaf-spring4 를 추가해야합니다 .

4.2. Spring 구성

다음으로 SpringTemplateEngine과 뷰 파일의 위치와 유형을 지정 하는 TemplateResolver 빈이 필요한 구성을 추가해야 합니다.

SpringResourceTemplateResolver은 Spring의 자원 해결 메커니즘과 통합되어 있습니다 :

@Configuration
@EnableWebMvc
public class ThymeleafConfiguration {
 
    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(thymeleafTemplateResolver());
        return templateEngine;
    }

    @Bean
    public SpringResourceTemplateResolver thymeleafTemplateResolver() {
        SpringResourceTemplateResolver templateResolver 
          = new SpringResourceTemplateResolver();
        templateResolver.setPrefix("/WEB-INF/views/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode("HTML5");
        return templateResolver;
    }
}

또한 ThymeleafViewResolver 유형 ViewResolver 빈이 필요합니다 .

@Bean
public ThymeleafViewResolver thymeleafViewResolver() {
    ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
    viewResolver.setTemplateEngine(templateEngine());
    return viewResolver;
}

4.3. Thymeleaf 템플릿

이제 WEB-INF / views 위치에 HTML 파일을 추가 할 수 있습니다 .

<html>
    <head>
        <meta charset="ISO-8859-1" />
        <title>User Registration</title>
    </head>
    <body>
        <form action="#" th:action="@{/register}" 
          th:object="${user}" method="post">
            Email:<input type="text" th:field="*{email}" />
            Password:<input type="password" th:field="*{password}" />
            <input type="submit" value="Submit" />
        </form>
    </body>
</html>

Thymeleaf 템플릿은 HTML 템플릿과 구문이 매우 유사합니다.

Spring 애플리케이션에서 Thymeleaf사용할 때 사용할 수있는 일부 기능 은 다음과 같습니다.

    • 양식 동작 정의 지원
    • 양식 입력을 데이터 모델에 바인딩
    • 양식 입력에 대한 유효성 검사
    • 메시지 소스의 값 표시
    • 템플릿 조각 렌더링

Thymeleaf 템플릿 사용에 대한 자세한 내용은 Spring MVC의 Thymeleaf 기사에서 읽을 수 있습니다 .

4.4. Thymeleaf 에서 Spring 부트

Spring Bootspring-boot-starter-thymeleaf 의존성 을 추가하여 Thymeleaf대한 자동 구성을 제공합니다 .

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    <version>2.3.3.RELEASE</version>
</dependency>

명시적인 구성이 필요하지 않습니다. 기본적으로 HTML 파일은 리소스 / 템플릿 위치 에 있어야합니다 .

5. FreeMarker

FreeMarker Apache Software Foundation 에서 구축 한 Java 기반 템플릿 엔진입니다. 웹 페이지를 생성하는 데 사용할 수 있지만 소스 코드, XML 파일, 구성 파일, 이메일 및 기타 텍스트 기반 형식도 생성 할 수 있습니다.

생성은 FreeMarker 템플릿 언어를 사용하여 작성된 템플릿 파일을 기반으로 수행됩니다 .

5.1. Maven 의존성

프로젝트에서 템플릿 사용을 시작하려면 freemarker 의존성이 필요합니다 .

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.23</version>
</dependency>

Spring 통합의 경우 spring-context-support 의존성 도 필요합니다 .

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>5.2.8.RELEASE</version>
</dependency>

5.2. Spring 구성

FreeMarker 를 Spring MVC와 통합 하려면 템플릿 파일의 위치를 ​​지정 하는 FreemarkerConfigurer 빈을 정의해야 합니다.

@Configuration
@EnableWebMvc
public class FreemarkerConfiguration {
 
    @Bean 
    public FreeMarkerConfigurer freemarkerConfig() { 
        FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer(); 
        freeMarkerConfigurer.setTemplateLoaderPath("/WEB-INF/views/");
        return freeMarkerConfigurer; 
    }
}

다음으로 FreeMarkerViewResolver 유형 의 적절한 ViewResolver을 정의해야합니다 .

@Bean 
public FreeMarkerViewResolver freemarkerViewResolver() { 
    FreeMarkerViewResolver resolver = new FreeMarkerViewResolver(); 
    resolver.setCache(true); 
    resolver.setPrefix(""); 
    resolver.setSuffix(".ftl"); 
    return resolver; 
}

5.3. FreeMarker 템플릿

WEB-INF / views 위치 에서 FreeMarker사용하여 HTML 템플릿을 만들 수 있습니다 .

<#import "/spring.ftl" as spring/>
<html>
    <head>
        <meta charset="ISO-8859-1" />
        <title>User Registration</title>
    </head>
    <body>
        <form action="register" method="post">
            <@spring.bind path="user" />
            Email: <@spring.formInput "user.email"/>
            Password: <@spring.formPasswordInput "user.password"/>
            <input type="submit" value="Submit" />
        </form>
    </body>
</html>

위의 예에서 우리는 데이터 모델에 대한 양식 입력 바인딩을 포함하여 FreeMarker의 양식 작업을 위해 Spring에서 정의한 매크로 세트를 가져 왔습니다 .

또한 FreeMarker 템플릿 언어 에는 컬렉션, 흐름 제어 구조, 논리 연산자, 형식화 및 구문 분석 문자열, 숫자 및 더 많은 기능을 사용하기위한 많은 태그, 지시문 및 표현식이 포함되어 있습니다.

5.4. 프리 마커Spring 부트

A의 Spring 부팅 응용 프로그램, 우리는 사용하여 필요한 구성을 단순화 할 수 스프링 부팅 스타터 - 프리 마커의 의존성을 :

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
    <version>2.3.3.RELEASE</version>
</dependency>

이 스타터는 필요한 자동 구성을 추가합니다. 리소스 / 템플릿 폴더 에 템플릿 파일을 배치하기 만하면 됩니다.

6. 그루비

Spring MVC 뷰는 Groovy Markup Template Engine을 사용하여 생성 할 수도 있습니다 . 이 엔진은 빌더 구문을 기반으로하며 모든 텍스트 형식을 생성하는 데 사용할 수 있습니다.

6.1. Maven 의존성

그루비 - 템플릿 의존성은 우리에 추가해야합니다 pom.xml 파일 :

<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy-templates</artifactId>
    <version>2.4.12</version>
</dependency>

6.2. Spring 구성

Markup Template Engine 을 Spring MVC와 통합 하려면 GroovyMarkupConfigurer 빈과 GroovyMarkupViewResolver 유형 ViewResolver정의해야합니다 .

@Configuration
@EnableWebMvc
public class GroovyConfiguration {
 
    @Bean
    public GroovyMarkupConfigurer groovyMarkupConfigurer() {
        GroovyMarkupConfigurer configurer = new GroovyMarkupConfigurer();
        configurer.setResourceLoaderPath("/WEB-INF/views/");
        return configurer;
    }
    
    @Bean
    public GroovyMarkupViewResolver thymeleafViewResolver() {
        GroovyMarkupViewResolver viewResolver = new GroovyMarkupViewResolver();
        viewResolver.setSuffix(".tpl");
        return viewResolver;
    }
}

6.3. Groovy 마크 업 템플릿

템플릿은 Groovy 언어로 작성되며 몇 가지 특징이 있습니다.

    • 그들은 바이트 코드로 컴파일됩니다.
    • 조각 및 레이아웃에 대한 지원을 포함합니다.
    • 국제화를 지원합니다.
    • 렌더링이 빠르다

데이터 바인딩을 포함하는 "사용자 등록"양식에 대한 Groovy 템플릿을 만들어 보겠습니다.

yieldUnescaped '<!DOCTYPE html>'                                                    
html(lang:'en') {                                                                   
    head {                                                                          
        meta('http-equiv':'"Content-Type" ' +
          'content="text/html; charset=utf-8"')      
        title('User Registration')                                                            
    }                                                                               
    body {                                                                          
        form (id:'userForm', action:'register', method:'post') {
            label (for:'email', 'Email')
            input (name:'email', type:'text', value:user.email?:'')
            label (for:'password', 'Password')
            input (name:'password', type:'password', value:user.password?:'')
            div (class:'form-actions') {
                input (type:'submit', value:'Submit')
            }                             
        }
    }                                                                               
}

6.4. 그루비 템플릿 엔진 에서 Spring 부트

Spring Boot 에는 Spring -boot-starter-groovy-templates 의존성 을 포함하여 추가 된 Groovy 템플릿 엔진에 대한 자동 구성이 포함되어 있습니다 .

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-groovy-templates</artifactId>
    <version>2.3.3.RELEASE</version>
</dependency>

템플릿의 기본 위치는 / resources / templates 입니다.

7. Jade4j

Jade4jJavascript 용 Pug 템플릿 엔진 (원래 Jade 라고 함 )의 Java 구현입니다 . Jade4j 템플릿은 HTML 파일 생성에 사용할 수 있습니다.

7.1. Maven 의존성

Spring 통합의 경우 spring-jade4j 의존성이 필요합니다 .

<dependency>
    <groupId>de.neuland-bfi</groupId>
    <artifactId>spring-jade4j</artifactId>
    <version>1.2.5</version>
</dependency>

7.2. Spring 구성

사용하려면 Jade4j을 Spring, 우리는 정의해야 SpringTemplateLoader의 템플릿의 위치뿐만 아니라 구성 Bean JadeConfiguration의 Bean :

@Configuration
@EnableWebMvc
public class JadeTemplateConfiguration {
 
    @Bean
    public SpringTemplateLoader templateLoader() {
        SpringTemplateLoader templateLoader 
          = new SpringTemplateLoader();
        templateLoader.setBasePath("/WEB-INF/views/");
        templateLoader.setSuffix(".jade");
        return templateLoader;
    }
 
    @Bean
    public JadeConfiguration jadeConfiguration() {
        JadeConfiguration configuration 
          = new JadeConfiguration();
        configuration.setCaching(false);
        configuration.setTemplateLoader(templateLoader());
        return configuration;
    }
}

다음으로 일반적인 ViewResolver 빈이 필요합니다 .이 경우에는 JadeViewResolver 유형 입니다 .

@Bean
public ViewResolver viewResolver() {
    JadeViewResolver viewResolver = new JadeViewResolver();
    viewResolver.setConfiguration(jadeConfiguration());
    return viewResolver;
}

7.3. Jade4j 템플릿

Jade4j 템플릿은 사용하기 쉬운 공백 구분 구문이 특징입니다.

doctype html
html
  head
    title User Registration
  body
    form(action="register" method="post" )
      label(for="email") Email:
      input(type="text" name="email")
      label(for="password") Password:
      input(type="password" name="password")
      input(type="submit" value="Submit")

이 프로젝트는 또한 템플릿을 작성하면서 출력을 볼 수 있는 매우 유용한 대화 형 문서를 제공 합니다.

Spring BootJade4j 스타터를 제공하지 않으므로 Boot 프로젝트에서 위에서 정의한 것과 동일한 Spring 구성을 추가해야합니다.

8. 기타 템플릿 엔진

지금까지 설명한 템플릿 엔진 외에도 사용할 수있는 것이 훨씬 더 많습니다.

그들 중 일부를 간단히 살펴 보겠습니다.

Velocity 는 오래된 템플릿 엔진으로 매우 복잡하지만 Spring이 4.3 버전부터 사용을 중단하고 Spring 5.0.1에서 완전히 제거되었다는 단점이 있습니다.

JMustache spring-boot-starter-mustache 의존성을 사용하여 Spring Boot 애플리케이션에 쉽게 통합 할 수있는 템플릿 엔진입니다.

Pebble 라이브러리 내에Spring 및 Spring Boot에 대한 지원을 포함합니다.

같은 다른 템플릿 라이브러리 핸들 바 또는 반작용 (A)의 상단에서 실행, JSR-223 과 같은 스크립트 엔진 Nashorn는 , 도 사용할 수 있습니다.

9. 결론

이 기사에서는 Spring 웹 애플리케이션을위한 가장 인기있는 템플릿 엔진을 살펴 보았습니다.

그리고 항상 그렇듯이 예제의 전체 소스 코드는 GitHub 에서 찾을 수 있습니다 .