春のテンプレートエンジン

Spring用のテンプレートエンジン

1. 概要

Spring Webフレームワークは、MVC(Model-View-Controller)パターンを中心に構築されているため、アプリケーション内の懸念事項を簡単に分離できます。 これにより、確立されたJSPテクノロジーからさまざまなテンプレートエンジンまで、さまざまなビューテクノロジーを使用できるようになります。

この記事では、Springで使用できる主なテンプレートエンジン、それらの構成、および使用例を見ていきます。

2. Spring View Technologies

Spring MVCアプリケーションの懸念事項は、あるビューテクノロジーから別のビューテクノロジーへの切り替えが明確に分離されていることを考えると、主に構成の問題です。

各ビュータイプをレンダリングするには、各テクノロジーに対応するViewResolverBeanを定義する必要があります。 これは、通常のJSPファイルを返すのと同じ方法で、@Controllerのマッピングメソッドからビュー名を返すことができることを意味します。

次のセクションでは、Java Server Pagesなどの従来のテクノロジと、Springで使用できるメインのテンプレートエンジン(ThymeleafGroovy、%())について説明します。 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と統合するには、thymeleafthymeleaf-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;
    }
}

また、タイプThymeleafViewResolverViewResolverBeanが必要です。

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

4.3. Thymeleafテンプレート

これで、WEB-INF/viewsの場所にHTMLファイルを追加できます。


    
        
        User Registration
    
    
        
Email: Password:

Thymeleafテンプレートは、構文がHTMLテンプレートと非常に似ています。

SpringアプリケーションでThymeleafを使用するときに使用できる機能には、次のものがあります。

  • フォームの動作を定義するためのサポート

  • フォーム入力をデータモデルにバインドする

  • フォーム入力の検証

  • メッセージソースからの値を表示する

  • テンプレートフラグメントのレンダリング

Thymeleafテンプレートの使用について詳しくは、記事Thymeleaf in Spring MVCをご覧ください。

4.4. Spring BootThymeleaf

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
    
    
        
<@spring.bind path="user" /> Email: <@spring.formInput "user.email"/> Password: <@spring.formPasswordInput "user.password"/>

上記の例では、フォーム入力をデータモデルにバインドするなど、FreeMarkerのフォームを操作するためにSpringによって定義されたマクロのセットをインポートしました。

また、FreeMarker Template Languageには、コレクション、フロー制御構造、論理演算子、文字列、数値、その他多くの機能のフォーマットと解析を操作するための多数のタグ、ディレクティブ、および式が含まれています。

5.4. Spring BootFreeMarker

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とタイプGroovyMarkupViewResolverViewResolverを定義する必要があります。

@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 BootGroovy 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

Jade4jは、Javascript用のPugテンプレートエンジン(元々はJadeと呼ばれていました)のJava実装です。 Jade4jテンプレートは、HTMLファイルの生成に使用できます。

7.1. Mavenの依存関係

Spring統合の場合、spring-jade4j依存関係が必要です。


    de.neuland-bfi
    spring-jade4j
    1.2.5

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 BootJade4jスターターを提供しないため、Bootプロジェクトでは、上記で定義したものと同じSpring構成を追加する必要があります。

8. その他のテンプレートエンジン

これまでに説明したテンプレートエンジンのほかに、使用可能なものがかなりあります。

簡単にいくつかを確認しましょう。

Velocityは古いテンプレートエンジンであり、非常に複雑ですが、バージョン4.3以降Springでの使用が廃止されているという欠点があります。

JMustacheは、spring-boot-starter-mustache依存関係を使用してSpringBootアプリケーションに簡単に統合できるテンプレートエンジンです。

Pebbleは、ライブラリ内のSpringと%(t​​1)sをサポートしている。

Nashorn,などのJSR-223スクリプトエンジン上で実行されるHandlebarsReactなどの他のテンプレートライブラリも使用できます。

9. 結論

この記事では、Spring Webアプリケーション用の最も人気のあるテンプレートエンジンのいくつかを紹介しました。

そして、いつものように、例の完全なソースコードはover on GitHubで見つけることができます。