Шаблоны двигателей для весны

Шаблоны двигателей на весну

1. обзор

Веб-инфраструктура Spring построена на основе шаблона MVC (Model-View-Controller), который упрощает разделение задач в приложении. Это дает возможность использовать различные технологии просмотра, от хорошо зарекомендовавшей себя технологии JSP до множества шаблонизаторов.

В этой статье мы рассмотрим основные механизмы шаблонов, которые можно использовать со Spring, их конфигурацию и примеры использования.

2. Spring View Technologies

Учитывая, что проблемы в приложении Spring MVC четко разделены, переключение с одной технологии представления на другую - это, прежде всего, вопрос конфигурации.

Чтобы отобразить каждый тип представления, нам нужно определить bean-компонентViewResolver, соответствующий каждой технологии. Это означает, что мы можем затем вернуть имена представлений из методов сопоставления@Controller таким же образом, как мы обычно возвращаем файлы JSP.

В следующих разделах мы собираемся рассмотреть более традиционные технологии, такие какJava Server Pages, а также основные механизмы шаблонов, которые можно использовать с Spring:Thymeleaf,Groovy,FreeMarker, Jade.с

Для каждого из них мы рассмотрим конфигурацию, необходимую как в стандартном приложении Spring, так и в приложении, построенном с использованиемSpring Boot.

3. Java Server Pagesс

JSP является одной из самых популярных технологий просмотра для приложений Java, и она поддерживается Spring из коробки. Для рендеринга файлов JSP обычно используется тип bean-компонентаViewResolverInternalResourceViewResolver:

@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;
    }
}

Затем мы можем начать создавать файлы JSP в папке/WEB-INF/views:

<%@ 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 - это шаблонизатор Java, который может обрабатывать файлы HTML, XML, текст, JavaScript или CSS. В отличие от других шаблонизаторов,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. Конфигурация пружины

Затем нам нужно добавить конфигурацию, для которой требуется bean-компонентSpringTemplateEngine, а также bean-компонент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;
    }
}

Также нам понадобится bean-компонентViewResolver типаThymeleafViewResolver:

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

4.3. Thymeleaf шаблоны

Теперь мы можем добавить HTML-файл в папкуWEB-INF/views:


    
        
        User Registration
    
    
        
Email: Password:

ШаблоныThymeleaf по синтаксису очень похожи на шаблоны HTML.

Некоторые из функций, которые доступны при использованииThymeleaf в приложении Spring:

  • поддержка определения поведения форм

  • привязка входных данных формы к моделям данных

  • проверка правильности ввода формы

  • отображение значений из источников сообщений

  • рендеринг фрагментов шаблона

Вы можете узнать больше об использовании шаблоновThymeleaf в нашей статьеThymeleaf in Spring MVC.

4.4. Thymeleaf вSpring Boot

Spring Boot предоставит автоконфигурацию дляThymeleaf, добавив зависимостьspring-boot-starter-thymeleaf:


    org.springframework.boot
    spring-boot-starter-thymeleaf
    1.5.6.RELEASE

Нет явной настройки не требуется. По умолчанию файлы HTML должны быть размещены в папкеresources/templates.

5. FreeMarkerс

FreeMarker - это шаблонизатор на основе Java, созданныйApache Software Foundation. Он может использоваться для создания веб-страниц, а также исходного кода, файлов 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 требует определения bean-компонентаFreemarkerConfigurer, который указывает расположение файлов шаблона:

@Configuration
@EnableWebMvc
public class FreemarkerConfiguration {

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

Затем нам нужно определить соответствующий bean-компонентViewResolver типаFreeMarkerViewResolver:

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

5.3. FreeMarker шаблоны

Мы можем создать шаблон HTML, используяFreeMarker в местоположенииWEB-INF/views:

<#import "/spring.ftl" as spring/>

    
        
        User Registration
    
    
        
<@spring.bind path="user" /> Email: <@spring.formInput "user.email"/> Password: <@spring.formPasswordInput "user.password"/>

В приведенном выше примере мы импортировали набор макросов, определенных Spring для работы с формами вFreeMarker, включая привязку входных данных формы к моделям данных.

ТакжеFreeMarker Template Language содержит большое количество тегов, директив и выражений для работы с коллекциями, структурами управления потоком, логическими операторами, форматированием и синтаксическим анализом строк, числами и многими другими функциями.

5.4. FreeMarker вSpring Boot

В приложении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 требует определения bean-компонентаGroovyMarkupConfigurer иViewResolver типаGroovyMarkupViewResolver:

@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. Groovy Template Engine вSpring Boot

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 - это Java-реализация механизма шаблоновPug (первоначально известного какJade) для Javascript. ШаблоныJade4j можно использовать для создания файлов HTML.

7.1. Maven Зависимости

Для интеграции Spring нам нужна зависимостьspring-jade4j:


    de.neuland-bfi
    spring-jade4j
    1.2.5

7.2. Конфигурация пружины

Чтобы использоватьJade4j с Spring, мы должны определить bean-компонентSpringTemplateLoader, который настраивает расположение шаблонов, а также bean-компонентJadeConfiguration:

@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;
    }
}

Далее нам понадобится обычный bean-компонент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")

В проекте также есть очень полезныйinteractive documentation, в котором вы можете просматривать выходные данные вашего шаблона по мере его написания.

Spring Boot не предоставляет стартерJade4j, поэтому в проектеBoot нам придется добавить ту же конфигурацию Spring, как определено выше.

8. Другие движки шаблонов

Помимо описанных выше движков шаблонов, есть еще несколько доступных для использования.

Давайте кратко рассмотрим некоторые из них.

Velocity - это более старый шаблонизатор, который очень сложен, но имеет тот недостаток, что Spring отказался от его использования с версии 4.3.

JMustache - это шаблонизатор, который можно легко интегрировать в приложение Spring Boot с помощью зависимостиspring-boot-starter-mustache.

Pebble содержит поддержку Spring иSpring Boot в своих библиотеках.

Также могут использоваться другие библиотеки шаблонов, такие какHandlebars илиReact, работающие поверх механизма сценариевJSR-223, напримерNashorn,.

9. Заключение

В этой статье мы рассмотрели некоторые из самых популярных шаблонизаторов для веб-приложений Spring.

И, как всегда, полный исходный код примеров можно найтиover on GitHub.