Groovy의 템플릿 엔진

1. 개요

이 입문 자습서에서는 Groovy의 템플릿 엔진 개념을 살펴 보겠습니다.

Groovy에서는 GString 을 사용 하여 동적 텍스트를 쉽게 생성 할 수 있습니다. 그러나 템플릿 엔진은 정적 템플릿을 사용하여 동적 텍스트를 처리하는 더 나은 방법을 제공합니다.

이러한 템플릿은 SMS 및 이메일과 같은 다양한 알림에 대한 정적 템플릿을 정의하는 데 편리합니다.

2. Groovy의 TemplateEngine 은 무엇입니까 ?

Groovy의 TemplateEnginecreateTemplate 메서드 를 포함하는 추상 클래스입니다 .

Groovy에서 사용 가능한 모든 템플릿 프레임 워크 엔진은 TemplateEngine을 확장 하고 createTemplate을 구현 합니다. 또한 모든 엔진은 Template 인터페이스 개체를 반환 합니다.

템플릿 인터페이스는 메소드가 메이크업 변수를 바인딩에 대한지도를한다. 따라서 모든 템플릿 프레임 워크에서 구현해야합니다.

Groovy에서 사용 가능한 모든 템플릿 프레임 워크의 기능과 동작에 대해 논의하겠습니다.

3. SimpleTemplateEngine

SimpleTemplateEngine는 사용하여 동적 텍스트 생성 문자열 보간과 스크립틀릿. 이 엔진은 SMS 및 간단한 텍스트 이메일과 같은 간단한 알림에 매우 유용합니다.

예를 들면 :

def smsTemplate = 'Dear , Thanks for reading our Article. ${signature}' def bindMap = [user: "Norman", signature: "Baeldung"] def smsText = new SimpleTemplateEngine().createTemplate(smsTemplate).make(bindMap) assert smsText.toString() == "Dear Norman, Thanks for reading our Article. Baeldung"

4. StreamingTemplateEngine

일반적으로 StreamingTemplateEngineSimpleTemplateEngine 과 유사하게 작동합니다 . 그러나 내부적으로 쓰기 가능한 클로저를 사용하여 템플릿을 생성합니다.

같은 이유로 더 큰 Strings (> 64K)에서 작업 할 때 이점이 있습니다. 따라서 SimpleTemplateEngine 보다 효율적 입니다.

정적 템플릿을 사용하여 동적 이메일 콘텐츠를 생성하는 간단한 예제를 작성해 보겠습니다.

먼저 정적 articleEmail 템플릿을 만듭니다.

Dear <% out <, Please read the requested article below. <% out < From, <% out <

여기, 우리는 동적 텍스트를위한 스크립틀릿과 작가를위한 아웃 .

이제 StreamingTemplateEngine을 사용하여 이메일 콘텐츠를 생성합니다 .

def articleEmailTemplate = new File('src/main/resources/articleEmail.template') def bindMap = [user: "Norman", signature: "Baeldung"] bindMap.articleText = """1. Overview This is a tutorial article on Template Engines...""" //can be a string larger than 64k def articleEmailText = new StreamingTemplateEngine().createTemplate(articleEmailTemplate).make(bindMap) assert articleEmailText.toString() == """Dear Norman, Please read the requested article below. 1. Overview This is a tutorial article on Template Engines... From, Baeldung"""

5. GStringTemplateEngine

이름에서 알 수 있듯이 GStringTemplateEngineGString 을 사용 하여 정적 템플릿에서 동적 텍스트를 생성합니다.

먼저 GString을 사용하여 간단한 이메일 템플릿을 작성해 보겠습니다 .

Dear $user, Thanks for subscribing our services. ${signature}

이제 GStringTemplateEngine 을 사용하여 동적 콘텐츠를 만듭니다.

def emailTemplate = new File('src/main/resources/email.template') def emailText = new GStringTemplateEngine().createTemplate(emailTemplate).make(bindMap) 

6. XmlTemplateEngine

XmlTemplateEngine은 우리가 동적 XML 출력을 생성 할 때 유용합니다. 입력으로 XML 스키마가 필요하며 두 개의 특수 태그를 허용합니다. 스크립트를 삽입하고 식을 주입합니다.

예를 들어 이미 논의 된 이메일 템플릿을 XML 로 변환 해 보겠습니다 .

def emailXmlTemplate = ''' def emailContent = "Thanks for subscribing our services." Dear ${user} emailContent ${signature} ''' def emailXml = new XmlTemplateEngine().createTemplate(emailXmlTemplate).make(bindMap)

따라서 emailXml 에는 XML이 렌더링되고 내용은 다음과 같습니다.

 Dear Norman Thanks for subscribing our services. Baeldung 

XML 출력이 템플릿 프레임 워크에 의해 들여 쓰기되고 아름답게 표시된다는 점은 흥미 롭습니다.

7. MarkupTemplateEngine

이 템플릿 프레임 워크는 HTML 및 기타 마크 업 언어를 생성하기위한 완전한 패키지입니다.

또한 Domain Specific Language를 사용하여 템플릿을 처리하며 Groovy에서 사용할 수있는 모든 템플릿 프레임 워크 중에서 가장 최적화되어 있습니다.

7.1. HTML

이미 논의 된 이메일 템플릿에 대해 HTML을 렌더링하는 간단한 예제를 작성해 보겠습니다 .

def emailHtmlTemplate = """ html { head { title('Service Subscription Email') } body { p('Dear Norman') p('Thanks for subscribing our services.') p('Baeldung') } }""" def emailHtml = new MarkupTemplateEngine().createTemplate(emailHtmlTemplate).make()

따라서 emailHtml 의 내용 은 다음과 같습니다.

Service Subscription Email 

Dear Norman

Thanks for subscribing our services.

Baeldung

7.2. XML

마찬가지로 XML을 렌더링 할 수 있습니다.

def emailXmlTemplate = """ xmlDeclaration() xs{ email { greet('Dear Norman') content('Thanks for subscribing our services.') signature('Baeldung') } }""" def emailXml = new MarkupTemplateEngine().createTemplate(emailXmlTemplate).make()

따라서 emailXml 의 내용 은 다음과 같습니다.

 Dear NormanThanks for subscribing our services. Baeldung

7.3. 템플릿 구성

Note that unlike like XmlTemplateEngine, the template output of this framework is not indented and beautified by itself.

For such configuration, we'll use the TemplateConfiguration class:

TemplateConfiguration config = new TemplateConfiguration() config.autoIndent = true config.autoEscape = true config.autoNewLine = true def templateEngine = new MarkupTemplateEngine(config)

7.4. Internationalization

Additionally, the locale property of TemplateConfiguration is available to enable the support of internationalization.

Firstly, we'll create a static template file email.tpl and copy the already discussed emailHtmlTemplate string into it. This will be treated as the default template.

Likewise, we'll create locale-based template files like email_ja_JP.tpl for Japanese, email_fr_FR.tpl for French, etc.

Finally, all we need is to set the locale in the TemplateConfiguration object:

config.locale = Locale.JAPAN

Hence, the corresponding locale-based template will be picked.

8. Conclusion

In this article, we've seen various template frameworks available in Groovy.

We can leverage these handy template engines to generate dynamic text using static templates. Therefore, they can be helpful in the dynamic generation of various kinds of notifications or on-screen messages and errors.

As usual, the code implementations of this tutorial are available on the GitHub project.