Sjabloonmotoren voor de lente

1. Overzicht

Het Spring-webframework is gebouwd rond het MVC-patroon (Model-View-Controller), waardoor het gemakkelijker wordt om problemen in een applicatie te scheiden. Dit biedt de mogelijkheid om verschillende weergavetechnologieën te gebruiken, van de gevestigde JSP-technologie tot een verscheidenheid aan sjabloonengines.

In dit artikel gaan we kijken naar de belangrijkste sjabloonengines die met Spring kunnen worden gebruikt, hun configuratie en voorbeelden van gebruik.

2. Spring View-technologieën

Aangezien de zorgen in een Spring MVC-applicatie netjes gescheiden zijn, is het overschakelen van de ene viewtechnologie naar de andere in de eerste plaats een kwestie van configuratie.

Om elk weergavetype weer te geven, moeten we een ViewResolver boon die overeenkomt met elke technologie. Dit betekent dat we vervolgens de weergavenamen van kunnen retourneren @Controller toewijzingsmethoden op dezelfde manier waarop we gewoonlijk JSP-bestanden retourneren.

In de volgende secties gaan we in op meer traditionele technologieën, zoals Java Server-pagina's, evenals de belangrijkste sjabloonengines die met Spring kunnen worden gebruikt: Thymeleaf, Groovy, FreeMarker, Jade.

Voor elk van deze zullen we de configuratie bespreken die nodig is, zowel in een standaard Spring-applicatie als in een applicatie die is gebouwd met Spring Boot.

3. Java Server-pagina's

JSP is een van de meest populaire weergavetechnologieën voor Java-toepassingen en wordt standaard ondersteund door Spring. Voor het renderen van JSP-bestanden is een veelgebruikt type ViewResolver boon is InternalResourceViewResolver:

@EnableWebMvc @Configuration openbare klasse ApplicationConfiguration implementeert WebMvcConfigurer {@Bean openbare ViewResolver jspViewResolver () {InternalResourceViewResolver bean = nieuwe InternalResourceViewResolver (); bean.setPrefix ("/ WEB-INF / views /"); bean.setSuffix (". jsp"); terugkeer boon; }}

Vervolgens kunnen we beginnen met het maken van JSP-bestanden in het / WEB-INF / weergaven plaats:

    Gebruikersregistratie E-mail: Wachtwoord: 

Als we de bestanden toevoegen aan een Spring Boot applicatie, dan in plaats van in het ApplicationConfiguration class, kunnen we de volgende eigenschappen in een application.properties het dossier:

spring.mvc.view.prefix: / WEB-INF / views / spring.mvc.view.suffix: .jsp

Op basis van deze eigenschappen, Spring Boot zal automatisch de benodigde ViewResolver.

4. Thymeleaf

Thymeleaf is een Java-sjabloonengine die HTML-, XML-, tekst-, JavaScript- of CSS-bestanden kan verwerken. In tegenstelling tot andere sjabloonengines, Thymeleaf maakt het gebruik van sjablonen als prototypes mogelijk, wat betekent dat ze kunnen worden bekeken als statische bestanden.

4.1. Afhankelijkheden van Maven

Integreren Thymeleaf met Spring moeten we de thymeleaf en thymeleaf-spring4 afhankelijkheden:

 org.thymeleaf thymeleaf 3.0.11.RELEASE org.thymeleaf thymeleaf-spring5 3.0.11.RELEASE 

Als we een Spring 4-project hebben, moeten we toevoegen thymeleaf-spring4.

4.2. Lente configuratie

Vervolgens moeten we de configuratie toevoegen waarvoor een SpringTemplateMotor boon, evenals een TemplateResolver bean die de locatie en het type van de weergavebestanden specificeert.

De SpringResourceTemplateResolver is geïntegreerd met het resourcemechanisme van Spring:

@Configuration @EnableWebMvc openbare klasse ThymeleafConfiguration {@Bean openbare SpringTemplateEngine templateEngine () {SpringTemplateEngine templateEngine = nieuwe SpringTemplateEngine (); templateEngine.setTemplateResolver (thymeleafTemplateResolver ()); retourneer templateEngine; } @Bean openbare SpringResourceTemplateResolver thymeleafTemplateResolver () {SpringResourceTemplateResolver templateResolver = nieuwe SpringResourceTemplateResolver (); templateResolver.setPrefix ("/ WEB-INF / views /"); templateResolver.setSuffix (". html"); templateResolver.setTemplateMode ("HTML5"); retourneer templateResolver; }}

We hebben ook een ViewResolver boon van het type ThymeleafViewResolver:

@Bean openbare ThymeleafViewResolver thymeleafViewResolver () {ThymeleafViewResolver viewResolver = nieuwe ThymeleafViewResolver (); viewResolver.setTemplateEngine (templateEngine ()); terug viewResolver; }

4.3. Thymeleaf Sjablonen

Nu kunnen we een HTML-bestand toevoegen in het WEB-INF / views plaats:

   Gebruikersregistratie E-mail: Wachtwoord: 

Thymeleaf sjablonen lijken qua syntaxis sterk op HTML-sjablonen.

Enkele van de functies die beschikbaar zijn bij gebruik Thymeleaf in een voorjaarstoepassing zijn:

    • ondersteuning voor het definiëren van vormgedrag
    • het binden van formulierinvoer aan datamodellen
    • validatie voor formulierinvoer
    • waarden uit berichtbronnen weergeven
    • het weergeven van sjabloonfragmenten

U kunt meer lezen over het gebruik van Thymeleaf sjablonen in ons artikel Thymeleaf in Spring MVC.

4.4. Thymeleaf in Spring Boot

Spring Boot zorgt voor automatische configuratie voor Thymeleaf door de spring-boot-starter-thymeleaf afhankelijkheid:

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

Er is geen expliciete configuratie nodig. HTML-bestanden moeten standaard in de bronnen / sjablonen plaats.

5. FreeMarker

FreeMarker is een op Java gebaseerde sjabloonengine die is gebouwd door de Apache Software Foundation. Het kan worden gebruikt om webpagina's te genereren, maar ook broncode, XML-bestanden, configuratiebestanden, e-mails en andere op tekst gebaseerde formaten.

Het genereren gebeurt op basis van sjabloonbestanden die zijn geschreven met de FreeMarker-sjabloontaal.

5.1. Afhankelijkheden van Maven

Om de sjablonen in ons project te gebruiken, hebben we het freemarker afhankelijkheid:

 org.freemarker freemarker 2.3.23 

Voor Spring-integratie hebben we ook de spring-context-ondersteuning afhankelijkheid:

 org.springframework spring-context-support 5.2.8.RELEASE 

5.2. Lente configuratie

Integreren FreeMarker met Spring MVC vereist het definiëren van een FreemarkerConfigurer bean die de locatie van de sjabloonbestanden specificeert:

@Configuration @EnableWebMvc openbare klasse FreemarkerConfiguration {@Bean openbare FreeMarkerConfigurer freemarkerConfig () {FreeMarkerConfigurer freeMarkerConfigurer = nieuwe FreeMarkerConfigurer (); freeMarkerConfigurer.setTemplateLoaderPath ("/ WEB-INF / views /"); retourneer freeMarkerConfigurer; }}

Vervolgens moeten we een geschikt ViewResolver boon van het type FreeMarkerViewResolver:

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

5.3. FreeMarker Sjablonen

We kunnen een HTML-sjabloon maken met FreeMarker in de WEB-INF / views plaats:

    Gebruikersregistratie E-mail: Wachtwoord: 

In het bovenstaande voorbeeld hebben we een set macro's geïmporteerd die door Spring zijn gedefinieerd voor het werken met formulieren in FreeMarker, inclusief het binden van formulierinputs aan datamodellen.

Ook de FreeMarker-sjabloontaal bevat een groot aantal tags, richtlijnen en uitdrukkingen voor het werken met verzamelingen, stroomcontrolestructuren, logische operatoren, het opmaken en ontleden van strings, getallen en nog veel meer functies.

5.4. FreeMarker in Spring Boot

In een Spring Boot applicatie, kunnen we de benodigde configuratie vereenvoudigen door de spring-boot-starter-freemarker afhankelijkheid:

 org.springframework.boot spring-boot-starter-freemarker 2.3.3.RELEASE 

Deze starter voegt de nodige auto-configuratie toe. Het enige wat we hoeven te doen is beginnen met het plaatsen van onze sjabloonbestanden in het bronnen / sjablonen map.

6. Groovy

Spring MVC-weergaven kunnen ook worden gegenereerd met behulp van de Groovy Markup Template Engine. Deze engine is gebaseerd op een builder-syntaxis en kan worden gebruikt voor het genereren van elk tekstformaat.

6.1. Afhankelijkheden van Maven

De groovy-sjablonen afhankelijkheid moet worden toegevoegd aan onze pom.xml:

 org.codehaus.groovy groovy-sjablonen 2.4.12 

6.2. Lente configuratie

De integratie van het Engine voor opmaaksjablonen met Spring MVC vereist het definiëren van een GroovyMarkupConfigurer boon en een ViewResolver van het type GroovyMarkupViewResolver:

@Configuration @EnableWebMvc openbare klasse GroovyConfiguration {@Bean openbaar GroovyMarkupConfigurer groovyMarkupConfigurer () {GroovyMarkupConfigurer configurer = nieuwe GroovyMarkupConfigurer (); configurer.setResourceLoaderPath ("/ WEB-INF / views /"); terugkeer configurator; } @Bean openbare GroovyMarkupViewResolver thymeleafViewResolver () {GroovyMarkupViewResolver viewResolver = nieuwe GroovyMarkupViewResolver (); viewResolver.setSuffix (". tpl"); terug viewResolver; }}

6.3. Groovy Markup Sjablonen

Sjablonen zijn geschreven in de taal Groovy en hebben verschillende kenmerken:

    • ze zijn gecompileerd in bytecode
    • ze bevatten ondersteuning voor fragmenten en lay-outs
    • zij ondersteunen internationalisering
    • de weergave is snel

Laten we een Groovy-sjabloon maken voor ons formulier "Gebruikersregistratie", dat gegevensbindingen bevat:

yieldUnescaped '' html (lang: 'en') {head {meta ('http-equiv': '"Content-Type"' + 'content = "text / html; charset = utf-8"') title ('Gebruiker Registration ')} body {form (id:' userForm ', action:' register ', method:' post ') {label (for:' email ',' Email ') input (name:' email ', type:' text ', waarde: gebruiker.email ?:' ') label (voor:' wachtwoord ',' Wachtwoord ') invoer (naam:' wachtwoord ', type:' wachtwoord ', waarde: gebruiker.wachtwoord ?:' ') div (class: 'form-actions') {input (type: 'submit', value: 'Submit')}}}}

6.4. Groovy sjabloon-engine in Spring Boot

Spring Boot bevat automatische configuratie voor de Groovy sjabloon-engine, die wordt toegevoegd door de spring-boot-starter-groovy-sjablonen afhankelijkheid:

 org.springframework.boot spring-boot-starter-groovy-templates 2.3.3.RELEASE 

De standaardlocatie voor de sjablonen is / resources / sjablonen.

7. Jade4j

Jade4j is de Java-implementatie van de Mops template engine (oorspronkelijk bekend als Jade) voor Javascript. Jade4j sjablonen kunnen worden gebruikt voor het genereren van HTML-bestanden.

7.1. Afhankelijkheden van Maven

Voor Spring-integratie hebben we de spring-jade4j-afhankelijkheid nodig:

 de.neuland-bfi spring-jade4j 1.2.5 

7.2. Lente configuratie

Gebruiken Jade4j met Spring moeten we een SpringTemplateLoader bean die de locatie van de sjablonen configureert, evenals een JadeConfiguration Boon:

@Configuration @EnableWebMvc openbare klasse JadeTemplateConfiguration {@Bean openbare SpringTemplateLoader templateLoader () {SpringTemplateLoader templateLoader = nieuwe SpringTemplateLoader (); templateLoader.setBasePath ("/ WEB-INF / views /"); templateLoader.setSuffix (". jade"); retourneer templateLoader; } @Bean openbaar JadeConfiguration jadeConfiguration () {JadeConfiguration configuration = new JadeConfiguration (); configuration.setCaching (false); configuration.setTemplateLoader (templateLoader ()); terugkeer configuratie; }}

Vervolgens hebben we het gebruikelijke nodig ViewResolver boon, in dit geval van type JadeViewResolver:

@Bean openbare ViewResolver viewResolver () {JadeViewResolver viewResolver = nieuwe JadeViewResolver (); viewResolver.setConfiguration (jadeConfiguration ()); terug viewResolver; }

7.3. Jade4j Sjablonen

Jade4j sjablonen worden gekenmerkt door een gebruiksvriendelijke witruimtegevoelige syntaxis:

doctype html html head title Gebruikersregistratie body form (action = "register" method = "post") label (for = "email") E-mail: input (type = "text" name = "email") label (voor = "wachtwoord ") Wachtwoord: input (type =" wachtwoord "name =" wachtwoord ") input (type =" submit "value =" Verzenden ")

Het project biedt ook een zeer nuttige interactieve documentatie, waarin u de uitvoer van uw sjabloon kunt bekijken terwijl u deze schrijft.

Spring Boot biedt geen Jade4j voorgerecht, dus in een Laars project, zouden we dezelfde Spring-configuratie moeten toevoegen als hierboven gedefinieerd.

8. Andere sjabloon-engines

Naast de sjabloon-engines die tot nu toe zijn beschreven, zijn er nog een flink aantal beschikbaar die kunnen worden gebruikt.

Laten we er een paar kort bespreken.

Snelheid is een oudere sjabloonengine, die erg complex is, maar het nadeel heeft dat Spring het gebruik ervan sinds versie 4.3 heeft gedeprecieerd en volledig is verwijderd in Spring 5.0.1.

J Snor is een sjabloonengine die eenvoudig in een Spring Boot-applicatie kan worden geïntegreerd met behulp van de spring-boot-starter-moustache afhankelijkheid.

Kiezelsteen bevat ondersteuning voor Spring en Spring Boot binnen zijn bibliotheken.

Andere sjabloonbibliotheken zoals Stuur of Reageer, draait bovenop een JSR-223 script-engine zoals Nashorn, kan ook worden gebruikt.

9. Conclusie

In dit artikel hebben we enkele van de meest populaire sjabloonengines voor Spring-webapplicaties besproken.

En, zoals altijd, is de volledige broncode van de voorbeelden te vinden op GitHub.