Mesin Template untuk Musim Semi

1. Ikhtisar

Framework web Spring dibuat dengan pola MVC (Model-View-Controller), yang memudahkan untuk memisahkan masalah dalam aplikasi. Hal ini memungkinkan kemungkinan untuk menggunakan teknologi tampilan yang berbeda, dari teknologi JSP yang mapan hingga berbagai mesin templat.

Pada artikel ini, kita akan melihat mesin template utama yang dapat digunakan dengan Spring, konfigurasinya, dan contoh penggunaannya.

2. Spring View Technologies

Mengingat bahwa kekhawatiran dalam aplikasi Spring MVC dipisahkan dengan rapi, perpindahan dari satu teknologi tampilan ke teknologi tampilan lainnya pada dasarnya adalah masalah konfigurasi.

Untuk merender setiap jenis tampilan, kita perlu mendefinisikan kacang ViewResolver yang sesuai dengan setiap teknologi. Ini berarti bahwa kita kemudian dapat mengembalikan nama tampilan dari metode pemetaan @Controller dengan cara yang sama seperti kita biasanya mengembalikan file JSP.

Pada bagian berikut, kita akan membahas lebih banyak teknologi tradisional seperti Java Server Pages , serta mesin template utama yang dapat digunakan dengan Spring: Thymeleaf , Groovy , FreeMarker, Jade.

Untuk masing-masing ini, kita akan membahas konfigurasi yang diperlukan baik dalam aplikasi Spring standar dan aplikasi yang dibangun menggunakan Spring Boot .

3. Halaman Server Java

JSP adalah salah satu teknologi tampilan paling populer untuk aplikasi Java, dan didukung oleh Spring out-of-the-box. Untuk merender file JSP, jenis kacang ViewResolver yang umum digunakan adalah 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; } }

Selanjutnya, kita dapat mulai membuat file JSP di lokasi / WEB-INF / views :

    User Registration    Email:   Password:      

Jika kita menambahkan file ke aplikasi Spring Boot , maka alih-alih di kelas ApplicationConfiguration , kita dapat menentukan properti berikut dalam file application.properties :

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

Berdasarkan properti ini, Spring Boot akan secara otomatis mengkonfigurasi ViewResolver yang diperlukan .

4. Timeleaf

Thymeleaf adalah mesin template Java yang dapat memproses file HTML, XML, teks, JavaScript, atau CSS. Tidak seperti mesin template lainnya, Thymeleaf mengizinkan penggunaan template sebagai prototipe, yang berarti dapat dilihat sebagai file statis.

4.1. Dependensi Maven

Untuk mengintegrasikan Thymeleaf dengan Spring, kita perlu menambahkan dependensi thymeleaf dan thymeleaf-spring4 :

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

Jika kita memiliki proyek Spring 4, maka kita perlu menambahkan thymeleaf-spring4 .

4.2. Konfigurasi Musim Semi

Selanjutnya, kita perlu menambahkan konfigurasi yang membutuhkan kacang SpringTemplateEngine , serta kacang TemplateResolver yang menentukan lokasi dan tipe file tampilan.

The SpringResourceTemplateResolver terintegrasi dengan mekanisme resolusi sumber daya 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; } }

Juga, kita membutuhkan ViewResolver kacang jenis ThymeleafViewResolver :

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

4.3. Template Timeleaf

Sekarang kita dapat menambahkan file HTML di lokasi WEB-INF / views :

   User Registration    Email: Password:    

Template timeleaf sangat mirip dalam sintaksis dengan template HTML.

Beberapa fitur yang tersedia saat menggunakan Thymeleaf di aplikasi Spring adalah:

    • dukungan untuk mendefinisikan perilaku bentuk
    • masukan formulir yang mengikat ke model data
    • validasi untuk input formulir
    • menampilkan nilai-nilai dari sumber pesan
    • merender fragmen template

Anda dapat membaca lebih lanjut tentang menggunakan template Thymeleaf di artikel kami Thymeleaf di Spring MVC.

4.4. Timeleaf di Spring Boot

Spring Boot akan menyediakan konfigurasi otomatis untuk Thymeleaf dengan menambahkan dependensi spring-boot-starter-thymeleaf :

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

Tidak diperlukan konfigurasi eksplisit. Secara default, file HTML harus ditempatkan di lokasi resource / template .

5. FreeMarker

FreeMarker adalah mesin templat berbasis Java yang dibuat oleh Apache Software Foundation . Ini dapat digunakan untuk menghasilkan halaman web, tetapi juga kode sumber, file XML, file konfigurasi, email dan format berbasis teks lainnya.

The generation is done based on template files written using the FreeMarker Template Language.

5.1. Maven Dependencies

To start using the templates in our project, we need the freemarker dependency:

 org.freemarker freemarker 2.3.23 

For Spring integration, we also need the spring-context-support dependency:

 org.springframework spring-context-support 5.2.8.RELEASE 

5.2. Spring Configuration

Integrating FreeMarker with Spring MVC requires defining a FreemarkerConfigurer bean which specifies the location of the template files:

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

Next, we need to define an appropriate ViewResolver bean of type FreeMarkerViewResolver:

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

5.3. FreeMarker Templates

We can create an HTML template using FreeMarker in the WEB-INF/views location:

    User Registration     Email:  Password:     

In the example above, we have imported a set of macros defined by Spring for working with forms in FreeMarker, including binding form inputs to data models.

Also, the FreeMarker Template Language contains a large number of tags, directives, and expressions for working with collections, flow control structures, logical operators, formatting and parsing strings, numbers and many more features.

5.4. FreeMarker in Spring Boot

In a Spring Boot application, we can simplify the needed configuration by using the spring-boot-starter-freemarker dependency:

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

This starter adds the necessary auto-configuration. All we need to do is start placing our template files in the resources/templates folder.

6. Groovy

Spring MVC views can also be generated using the Groovy Markup Template Engine. This engine is based on a builder syntax and can be used for generating any text format.

6.1. Maven Dependencies

The groovy-templates dependency needs to be added to our pom.xml:

 org.codehaus.groovy groovy-templates 2.4.12 

6.2. Spring Configuration

The integration of the Markup Template Engine with Spring MVC requires defining a GroovyMarkupConfigurer bean and a ViewResolver of type 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 Templates

Templates are written in the Groovy language and have several characteristics:

    • they are compiled into bytecode
    • they contain support for fragments and layouts
    • they provide support for internationalization
    • the rendering is fast

Let's create a Groovy template for our “User Registration” form, which includes data bindings:

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 in Spring Boot

Spring Boot contains auto-configuration for the Groovy Template Engine, which is added by including the spring-boot-starter-groovy-templates dependency:

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

The default location for the templates is /resources/templates.

7. Jade4j

Jade4j is the Java implementation of the Pug template engine (originally known as Jade) for Javascript. Jade4j templates can be used for generating HTML files.

7.1. Maven Dependencies

For Spring integration, we need the spring-jade4j dependency:

 de.neuland-bfi spring-jade4j 1.2.5 

7.2. Spring Configuration

To use Jade4j with Spring, we have to define a SpringTemplateLoader bean that configures the location of the templates, as well as a JadeConfiguration bean:

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

Next, we need the usual ViewResolver bean, in this case of type JadeViewResolver:

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

7.3. Jade4j Templates

Jade4j templates are characterized by an easy-to-use whitespace-sensitive syntax:

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")

The project also provides a very useful interactive documentation, where you can view the output of your template as you write it.

Spring Boot does not provide a Jade4j starter, so in a Boot project, we would have to add the same Spring configuration as defined above.

8. Other Template Engines

Besides the template engines described so far, there are quite a few more available which may be used.

Let's review some of them briefly.

Velocity is an older template engine, which is very complex but has the disadvantage that Spring has deprecated its use since version 4.3 and removed completely in Spring 5.0.1.

JMustache adalah mesin template yang dapat dengan mudah diintegrasikan ke dalam aplikasi Spring Boot dengan menggunakan dependensi spring-boot-starter-mustache .

Pebble berisi dukungan untuk Spring dan Spring Boot di dalam perpustakaannya.

Library template lainnya seperti Handlebars atau React , yang berjalan di atas mesin skrip JSR-223 seperti Nashorn, juga dapat digunakan.

9. Kesimpulan

Pada artikel ini, kami telah membahas beberapa mesin template paling populer untuk aplikasi web Spring.

Dan, seperti biasa, kode sumber lengkap dari contoh dapat ditemukan di GitHub.