Шаблоны двигателей на весну
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
Шаблоны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 для работы с формами в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.