Malmotorer for våren

1. Oversikt

Spring Web Framework er bygget opp rundt MVC-mønsteret (Model-View-Controller), noe som gjør det lettere å skille bekymringer i en applikasjon. Dette gir mulighet for å bruke forskjellige visningsteknologier, fra den veletablerte JSP-teknologien til en rekke malmotorer.

I denne artikkelen skal vi ta en titt på de viktigste malmotorene som kan brukes med Spring, deres konfigurasjon og eksempler på bruk.

2. Spring View Technologies

Gitt at bekymringer i en Spring MVC-applikasjon er rent skilt, er det først og fremst et spørsmål om konfigurasjon å bytte fra en visningsteknologi til en annen.

For å gjengi hver visningstype, må vi definere en ViewResolver bønne som tilsvarer hver teknologi. Dette betyr at vi da kan returnere visningsnavnene fra @Kontrollør kartleggingsmetoder på samme måte som vi vanligvis returnerer JSP-filer.

I de følgende avsnittene skal vi gå over mer tradisjonelle teknologier som Java Server Pages, samt hovedmalmotorer som kan brukes med Spring: Thymeleaf, Groovy, FreeMarker, Jade.

For hver av disse vil vi gå over konfigurasjonen som er nødvendig både i en standard Spring-applikasjon og en applikasjon som er bygd ved hjelp av Vårstøvel.

3. Java Server Pages

JSP er en av de mest populære visningsteknologiene for Java-applikasjoner, og den støttes av Spring out-of-the-box. For gjengivelse av JSP-filer, en vanlig brukt type ViewResolver bønne er InternalResourceViewResolver:

@EnableWebMvc @ Configuration offentlig klasse ApplicationConfiguration implementerer WebMvcConfigurer {@Bean public ViewResolver jspViewResolver () {InternalResourceViewResolver bean = new InternalResourceViewResolver (); bean.setPrefix ("/ WEB-INF / views /"); bean.setSuffix (". jsp"); retur bønne; }}

Deretter kan vi begynne å lage JSP-filer i / WEB-INF / visninger plassering:

    Brukerregistrerings-e-postadresse: Passord: 

Hvis vi legger til filene i a Vårstøvel applikasjonen, deretter i stedet for i ApplicationConfiguration klasse kan vi definere følgende egenskaper i en application.properties fil:

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

Basert på disse egenskapene, Vårstøvel vil automatisk konfigurere det nødvendige ViewResolver.

4. Thymeleaf

Thymeleaf er en Java malmotor som kan behandle HTML-, XML-, tekst-, JavaScript- eller CSS-filer. I motsetning til andre malmotorer, Thymeleaf tillater bruk av maler som prototyper, noe som betyr at de kan sees på som statiske filer.

4.1. Maven avhengigheter

Å integrere Thymeleaf med våren, må vi legge til thymeleaf og thymeleaf-spring4 avhengigheter:

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

Hvis vi har et Spring 4-prosjekt, må vi legge til thymeleaf-spring4.

4.2. Vårkonfigurasjon

Deretter må vi legge til konfigurasjonen som krever en SpringTemplateEngine bønne, samt en MalResolver bønne som spesifiserer plassering og type visningsfilene.

De SpringResourceTemplateResolver er integrert med vårens ressursoppløsningsmekanisme:

@Configuration @EnableWebMvc public class ThymeleafConfiguration {@Bean public SpringTemplateEngine templateEngine () {SpringTemplateEngine templateEngine = new SpringTemplateEngine (); templateEngine.setTemplateResolver (thymeleafTemplateResolver ()); returmalMotor; } @Bean public SpringResourceTemplateResolver thymeleafTemplateResolver () {SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver (); templateResolver.setPrefix ("/ WEB-INF / views /"); templateResolver.setSuffix (". html"); templateResolver.setTemplateMode ("HTML5"); returmalResolver; }}

Vi trenger også en ViewResolver bønne av typen ThymeleafViewResolver:

@Bean offentlig ThymeleafViewResolver thymeleafViewResolver () {ThymeleafViewResolver viewResolver = ny ThymeleafViewResolver (); viewResolver.setTemplateEngine (templateEngine ()); return viewResolver; }

4.3. Thymeleaf Maler

Nå kan vi legge til en HTML-fil i WEB-INF / visninger plassering:

   Brukerregistrerings-e-postadresse: Passord: 

Thymeleaf maler er veldig like i syntaksen til HTML-maler.

Noen av funksjonene som er tilgjengelige når du bruker Thymeleaf i en vårapplikasjon er:

    • støtte for å definere formatferd
    • bindende skjemainnganger til datamodeller
    • validering for skjemainnganger
    • viser verdier fra meldingskilder
    • gjengivelse av malfragmenter

Du kan lese mer om bruk Thymeleaf maler i vår artikkel Thymeleaf in Spring MVC.

4.4. Thymeleaf i Vårstøvel

Vårstøvel vil gi automatisk konfigurasjon for Thymeleaf ved å legge til spring-boot-starter-thymeleaf avhengighet:

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

Ingen eksplisitt konfigurasjon er nødvendig. Som standard skal HTML-filer plasseres i ressurser / maler plassering.

5. FreeMarker

FreeMarker er en Java-basert malmotor bygget av Apache Software Foundation. Den kan brukes til å generere websider, men også kildekode, XML-filer, konfigurasjonsfiler, e-post og andre tekstbaserte formater.

Generasjonen gjøres basert på malfiler skrevet med FreeMarker mal språk.

5.1. Maven avhengigheter

For å begynne å bruke malene i prosjektet vårt, trenger vi frimarker avhengighet:

 org.freemarker freemarker 2.3.23 

For vårintegrasjon trenger vi også vår-kontekst-støtte avhengighet:

 org.springframework spring-context-support 5.2.8.RELEASE 

5.2. Vårkonfigurasjon

Integrering FreeMarker med Spring MVC krever definering av a FreemarkerConfigurer bønne som spesifiserer plasseringen til malfilene:

@Configuration @EnableWebMvc public class FreemarkerConfiguration {@Bean public FreeMarkerConfigurer freemarkerConfig () {FreeMarkerConfigurer freeMarkerConfigurer = ny FreeMarkerConfigurer (); freeMarkerConfigurer.setTemplateLoaderPath ("/ WEB-INF / views /"); returner freeMarkerConfigurer; }}

Deretter må vi definere en passende ViewResolver bønne av typen FreeMarkerViewResolver:

@Bean offentlig FreeMarkerViewResolver freemarkerViewResolver () {FreeMarkerViewResolver resolver = ny FreeMarkerViewResolver (); resolver.setCache (true); resolver.setPrefix (""); resolver.setSuffix (". ftl"); retur resolver; }

5.3. FreeMarker Maler

Vi kan lage en HTML-mal ved hjelp av FreeMarker i WEB-INF / visninger plassering:

    Brukerregistrerings-e-postadresse: Passord: 

I eksemplet ovenfor har vi importert et sett med makroer definert av Spring for å jobbe med skjemaer i FreeMarker, inkludert bindende skjemainnganger til datamodeller.

Også, den FreeMarker mal språk inneholder et stort antall koder, direktiver og uttrykk for å arbeide med samlinger, flytkontrollstrukturer, logiske operatorer, formatering og parsing av strenger, tall og mange flere funksjoner.

5.4. FreeMarker i Vårstøvel

I en Vårstøvel applikasjon, kan vi forenkle den nødvendige konfigurasjonen ved å bruke spring-boot-starter-freemarker avhengighet:

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

Denne starteren legger til den nødvendige autokonfigurasjonen. Alt vi trenger å gjøre er å begynne å plassere malfilene våre i ressurser / maler mappe.

6. Groovy

Spring MVC-visninger kan også genereres ved hjelp av Groovy Markup Template Engine. Denne motoren er basert på en byggesyntaks og kan brukes til å generere hvilket som helst tekstformat.

6.1. Maven avhengigheter

De groovy-maler avhengighet må legges til vår pom.xml:

 org.codehaus.groovy groovy-maler 2.4.12 

6.2. Vårkonfigurasjon

Integrasjonen av Markup Template Engine med Spring MVC krever definering av a GroovyMarkupConfigurer bønne og en ViewResolver av typen GroovyMarkupViewResolver:

@Configuration @EnableWebMvc public class GroovyConfiguration {@Bean public GroovyMarkupConfigurer groovyMarkupConfigurer () {GroovyMarkupConfigurer configurer = new GroovyMarkupConfigurer (); configurer.setResourceLoaderPath ("/ WEB-INF / views /"); retur konfigurator; } @Bean offentlig GroovyMarkupViewResolver thymeleafViewResolver () {GroovyMarkupViewResolver viewResolver = ny GroovyMarkupViewResolver (); viewResolver.setSuffix (". tpl"); return viewResolver; }}

6.3. Groovy Markup Maler

Maler er skrevet på Groovy-språket og har flere egenskaper:

    • de er samlet til bytekode
    • de inneholder støtte for fragmenter og oppsett
    • de gir støtte for internasjonalisering
    • gjengivelsen er rask

La oss lage en Groovy-mal for skjemaet "Brukerregistrering", som inkluderer databindinger:

yieldUnescaped '' html (lang: 'en') {head {meta ('http-equiv': '"Content-Type"' + 'content = "text / html; charset = utf-8"') title ('User Registrering ')} body {form (id:' userForm ', action:' register ', method:' post ') {label (for:' email ',' Email ') input (name:' email ', type:' tekst ', verdi: bruker.email ?:' ') etikett (for:' passord ',' passord ') inngang (navn:' passord ', type:' passord ', verdi: bruker.passord ?:' ') div (klasse: 'form-actions') {input (type: 'submit', value: 'Submit')}}}

6.4. Groovy malmotor i Vårstøvel

Vårstøvel inneholder automatisk konfigurasjon for Groovy malmotor, som er lagt til ved å inkludere spring-boot-starter-groovy-templates avhengighet:

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

Standardplasseringen for malene er / ressurser / maler.

7. Jade4j

Jade4j er Java-implementeringen av Mops malmotor (opprinnelig kjent som Jade) for Javascript. Jade4j maler kan brukes til å generere HTML-filer.

7.1. Maven avhengigheter

For vårintegrasjon trenger vi vår-jade4j-avhengighet:

 de.neuland-bfi spring-jade4j 1.2.5 

7.2. Vårkonfigurasjon

Å bruke Jade4j med våren, må vi definere en SpringTemplateLoader bønne som konfigurerer plasseringen til malene, samt en JadeConfiguration bønne:

@Configuration @EnableWebMvc public class JadeTemplateConfiguration {@Bean public SpringTemplateLoader templateLoader () {SpringTemplateLoader templateLoader = new SpringTemplateLoader (); templateLoader.setBasePath ("/ WEB-INF / views /"); templateLoader.setSuffix (". jade"); returmalLoader; } @Bean public JadeConfiguration jadeConfiguration () {JadeConfiguration configuration = new JadeConfiguration (); configuration.setCaching (false); configuration.setTemplateLoader (templateLoader ()); retur konfigurasjon; }}

Deretter trenger vi det vanlige ViewResolver bønne, i dette tilfellet av typen JadeViewResolver:

@Bean public ViewResolver viewResolver () {JadeViewResolver viewResolver = ny JadeViewResolver (); viewResolver.setConfiguration (jadeConfiguration ()); return viewResolver; }

7.3. Jade4j Maler

Jade4j maler er preget av en brukervennlig mellomromssensitaks:

doktype html html-tittel Brukerregistrering kroppsskjema (handling = "registrer" metode = "post") etikett (for = "e-post") E-post: input (type = "tekst" navn = "e-post") etikett (for = "passord ") Passord: inngang (type =" passord "navn =" passord ") inngang (type =" send "verdi =" Send ")

Prosjektet gir også en veldig nyttig interaktiv dokumentasjon, der du kan se utdataene fra malen mens du skriver den.

Vårstøvel gir ikke en Jade4j forrett, så i en Støvel prosjekt, måtte vi legge til den samme vårkonfigurasjonen som definert ovenfor.

8. Andre malmotorer

Foruten malmotorer som er beskrevet hittil, er det ganske mange flere tilgjengelige som kan brukes.

La oss gjennomgå noen av dem kort.

Hastighet er en eldre malmotor, som er veldig kompleks, men som har ulempen at Spring har avviklet bruken siden versjon 4.3 og fjernet helt våren 5.0.1.

JMustache er en malmotor som enkelt kan integreres i en Spring Boot-applikasjon ved hjelp av spring-boot-starter-bart avhengighet.

Småstein inneholder støtte for våren og Vårstøvel innenfor sine biblioteker.

Andre malbiblioteker som Styr eller Reagere, kjører på toppen av en JSR-223 skriptmotor som f.eks Nashorn, kan også brukes.

9. Konklusjon

I denne artikkelen har vi gått gjennom noen av de mest populære malmotorene for vårapplikasjoner.

Og som alltid kan hele kildekoden til eksemplene finnes på GitHub.