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과 통합하려면 thymeleaf 및 thymeleaf-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 Boot 는 spring-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
Jade4j 는 Javascript 용 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 Boot 는 Jade4j 스타터를 제공하지 않으므로 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 에서 찾을 수 있습니다 .
- https://docs.spring.io/spring-framework/docs/current/reference/html
- https://www.baeldung.com/spring-template-engines
'Java' 카테고리의 다른 글
@Before 대 @BeforeClass 대 @BeforeEach 대 @BeforeAll (0) | 2021.04.18 |
---|---|
Spring MVC의 HandlerAdapters (0) | 2021.04.18 |
Spring 5 및 Servlet 4 – PushBuilder (0) | 2021.04.18 |
서블릿 리디렉션과 전달 (0) | 2021.04.17 |
Spring에서 ThymeLeaf 및 FreeMarker 이메일 템플릿 사용 (0) | 2021.04.17 |