Spring用のテンプレートエンジン
1. 概要
Spring Webフレームワークは、MVC(Model-View-Controller)パターンを中心に構築されているため、アプリケーション内の懸念事項を簡単に分離できます。 これにより、確立されたJSPテクノロジーからさまざまなテンプレートエンジンまで、さまざまなビューテクノロジーを使用できるようになります。
この記事では、Springで使用できる主なテンプレートエンジン、それらの構成、および使用例を見ていきます。
2. Spring View Technologies
Spring MVCアプリケーションの懸念事項は、あるビューテクノロジーから別のビューテクノロジーへの切り替えが明確に分離されていることを考えると、主に構成の問題です。
各ビュータイプをレンダリングするには、各テクノロジーに対応するViewResolverBeanを定義する必要があります。 これは、通常のJSPファイルを返すのと同じ方法で、@Controllerのマッピングメソッドからビュー名を返すことができることを意味します。
次のセクションでは、Java Server Pagesなどの従来のテクノロジと、Springで使用できるメインのテンプレートエンジン(Thymeleaf、Groovy、%())について説明します。 t3)s
これらのそれぞれについて、標準のSpringアプリケーションとSpring Bootを使用して構築されたアプリケーションの両方で必要な構成について説明します。
3. Java Server Pages
JSPは、Javaアプリケーションで最も人気のあるビューテクノロジーの1つであり、そのまま使用できる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"%>
User Registration
Email:
Password:
ファイルをSpring Bootアプリケーションに追加する場合、ApplicationConfigurationクラスではなく、application.propertiesファイルで次のプロパティを定義できます。
spring.mvc.view.prefix: /WEB-INF/views/
spring.mvc.view.suffix: .jsp
これらのプロパティに基づいて、Spring Bootは必要なViewResolverを自動構成します。
4. Thymeleaf
Thymeleafは、HTML、XML、テキスト、JavaScript、またはCSSファイルを処理できるJavaテンプレートエンジンです。 他のテンプレートエンジンとは異なり、Thymeleafではテンプレートをプロトタイプとして使用できます。つまり、静的ファイルとして表示できます。
4.1. Mavenの依存関係
ThymeleafをSpringと統合するには、thymeleafとthymeleaf-spring4の依存関係を追加する必要があります。
org.thymeleaf
thymeleaf
3.0.7.RELEASE
org.thymeleaf
thymeleaf-spring4
3.0.7.RELEASE
Spring 3プロジェクトがある場合は、thymeleaf-spring3を追加する必要があります。
4.2. スプリング構成
次に、SpringTemplateEngine Beanと、ビューファイルの場所とタイプを指定するTemplateResolverBeanを必要とする構成を追加する必要があります。
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のViewResolverBeanが必要です。
@Bean
public ThymeleafViewResolver thymeleafViewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
return viewResolver;
}
4.3. Thymeleafテンプレート
これで、WEB-INF/viewsの場所にHTMLファイルを追加できます。
User Registration
Thymeleafテンプレートは、構文がHTMLテンプレートと非常に似ています。
SpringアプリケーションでThymeleafを使用するときに使用できる機能には、次のものがあります。
-
フォームの動作を定義するためのサポート
-
フォーム入力をデータモデルにバインドする
-
フォーム入力の検証
-
メッセージソースからの値を表示する
-
テンプレートフラグメントのレンダリング
Thymeleafテンプレートの使用について詳しくは、記事Thymeleaf in Spring MVCをご覧ください。
4.4. Spring BootのThymeleaf
Spring Bootは、spring-boot-starter-thymeleafの依存関係を追加することにより、Thymeleafの自動構成を提供します。
org.springframework.boot
spring-boot-starter-thymeleaf
1.5.6.RELEASE
明示的な構成は必要ありません。 デフォルトでは、HTMLファイルはresources/templatesの場所に配置する必要があります。
5. FreeMarker
FreeMarkerは、Apache Software Foundationによって構築されたJavaベースのテンプレートエンジンです。 Webページの生成に使用できますが、ソースコード、XMLファイル、構成ファイル、電子メール、その他のテキストベースの形式も生成できます。
生成は、FreeMarker Template Languageを使用して書き込まれたテンプレートファイルに基づいて行われます。
5.1. Mavenの依存関係
プロジェクトでテンプレートの使用を開始するには、freemarkerの依存関係が必要です。
org.freemarker
freemarker
2.3.23
Spring統合の場合、spring-context-support依存関係も必要です。
org.springframework
spring-context-support
4.3.10.RELEASE
5.2. スプリング構成
FreeMarkerをSpring MVCと統合するには、テンプレートファイルの場所を指定するFreemarkerConfigurerBeanを定義する必要があります。
@Configuration
@EnableWebMvc
public class FreemarkerConfiguration {
@Bean
public FreeMarkerConfigurer freemarkerConfig() {
FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer();
freeMarkerConfigurer.setTemplateLoaderPath("/WEB-INF/views/");
return freeMarkerConfigurer;
}
}
次に、タイプFreeMarkerViewResolverの適切なViewResolverBeanを定義する必要があります。
@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/>
User Registration
上記の例では、フォーム入力をデータモデルにバインドするなど、FreeMarkerのフォームを操作するためにSpringによって定義されたマクロのセットをインポートしました。
また、FreeMarker Template Languageには、コレクション、フロー制御構造、論理演算子、文字列、数値、その他多くの機能のフォーマットと解析を操作するための多数のタグ、ディレクティブ、および式が含まれています。
5.4. Spring BootのFreeMarker
Spring Bootアプリケーションでは、spring-boot-starter-freemarker依存関係を使用して、必要な構成を簡略化できます。
org.springframework.boot
spring-boot-starter-freemarker
1.5.6.RELEASE
このスターターは、必要な自動構成を追加します。 テンプレートファイルをresources/templatesフォルダーに配置し始めるだけです。
6. Groovy
Spring MVCビューは、Groovy Markup Template Engineを使用して生成することもできます。 このエンジンはビルダー構文に基づいており、任意のテキスト形式の生成に使用できます。
6.1. Mavenの依存関係
groovy-templates依存関係をpom.xmlに追加する必要があります。
org.codehaus.groovy
groovy-templates
2.4.12
6.2. スプリング構成
Markup Template EngineをSpring MVCと統合するには、GroovyMarkupConfigurer Beanとタイプ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 Markupテンプレート
テンプレートはGroovy言語で書かれており、いくつかの特徴があります。
-
それらはバイトコードにコンパイルされます
-
フラグメントとレイアウトのサポートが含まれています
-
国際化のサポートを提供します
-
レンダリングが速い
「ユーザー登録」フォーム用のGroovyテンプレートを作成しましょう。これには、データバインディングが含まれています。
yieldUnescaped ''
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 BootのGroovy Template Engine
Spring Bootには、Groovy Template Engineの自動構成が含まれています。これは、spring-boot-starter-groovy-templatesの依存関係を含めることで追加されます。
org.springframework.boot
spring-boot-starter-groovy-templates
1.5.6.RELEASE
テンプレートのデフォルトの場所は/resources/templatesです。
7. Jade4j
7.2. スプリング構成
SpringでJade4jを使用するには、テンプレートの場所を構成するSpringTemplateLoader Beanと、JadeConfigurationBeanを定義する必要があります。
@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 Bean、この場合はタイプ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")
このプロジェクトは、非常に便利なinteractive documentationも提供します。ここでは、テンプレートを作成するときに、テンプレートの出力を表示できます。
Spring BootはJade4jスターターを提供しないため、Bootプロジェクトでは、上記で定義したものと同じSpring構成を追加する必要があります。
8. その他のテンプレートエンジン
これまでに説明したテンプレートエンジンのほかに、使用可能なものがかなりあります。
簡単にいくつかを確認しましょう。
Velocityは古いテンプレートエンジンであり、非常に複雑ですが、バージョン4.3以降Springでの使用が廃止されているという欠点があります。
JMustacheは、spring-boot-starter-mustache依存関係を使用してSpringBootアプリケーションに簡単に統合できるテンプレートエンジンです。
Pebbleは、ライブラリ内のSpringと%(t1)sをサポートしている。
Nashorn,などのJSR-223スクリプトエンジン上で実行されるHandlebarsやReactなどの他のテンプレートライブラリも使用できます。
9. 結論
この記事では、Spring Webアプリケーション用の最も人気のあるテンプレートエンジンのいくつかを紹介しました。
そして、いつものように、例の完全なソースコードはover on GitHubで見つけることができます。