前言

在之前的文章Spring Boot 整合 Thymeleaf中,咱们学习了如何将模板 Thymeleaf 整合到 Spring Boot 中,那明天咱们就来看看,另一个老牌的开源免费模板引擎 - FreeMarker!

FreeMarker 简介

FreeMarker 是一款模板引擎:即一种基于模板和要扭转的数据,并用来生成输入文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员能够嵌入他们所开发产品的组件。

以上就是出自 FreeMarker 的官网定义,咱们通过应用 FreeMarker,能够将咱们所需的模板何数据渲染成 HTML,从而实现咱们想要的成果。通过将模板与数据离开,让分工更加明确,模板方面则专一于如何将数据进行展示,而在数据方面,咱们就能够专一于展现何种数据,下图就是咱们以上所形容的 FreeMarker 的性能。

那接下来,咱们就来看看,如何将 FreeMarker 像 Thymeleaf 一样整合到咱们的 Spring Boot 中,让咱们的开发更加简略。

筹备工作

环境筹备

正式开始之前,仍然给出本文所基于的环境,防止环境问题可能给大家带来的影响。

  • JDK 17(实践上举荐不低于 1.8 版本)
  • IDEA
  • SpringBoot 2.x

增加 FreeMarker 依赖

开始之前,咱们须要增加 FreeMarker 的相干依赖,同样这里咱们能够抉择两种形式。一种是在创立我的项目时就增加上,另一种则是创立我的项目后在我的项目 pom.xml 文件中手动增加,接下来咱们别离来看看两种不同的形式应该如何增加。如果还不分明如何创立 Spring Boot 我的项目,能够参照我之前的一篇文章:创立 Spring Boot 我的项目的 3 种形式。

  1. 第一种

在应用 IDEA 创立 Spring Boot 新我的项目时,增加依赖时将模板引擎中的 Apache FreeMarker 勾选上。

2.第二种

如果在创立时未增加 FreeMarker 模板引擎依赖,或者在我的项目开始创立之初并未有此需要,但后续过程中又减少了该需要,则此时能够间接在我的项目 pom.xml 中手动增加 FreeMarker 依赖即可。

<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-freemarker</artifactId></dependency>

增加 FreeMarker 相干配置

增加依赖后,咱们须要在我的项目配置文件 application.yml 中增加 FreeMarker 的相干配置。

spring:  freemarker:    # 模板后缀名    suffix: .ftl    # 文档类型    content-type: text/html    # 页面编码    charset: UTF-8    # 页面缓存    cache: false    # 模板门路    template-loader-path: classpath:/templates/

编写实体类和 Controller

编写实体类

创立一个 User 类,并将其各种 settergetter、构造方法等实现,这里我仍然应用了 Lombok 插件,以便简化咱们的代码。对于该插件的更多用法,能够参照我之前的文章:Lombok 的装置及使用指南。

package com.cunyu.springbootfreemarkerdemo.entity;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import org.springframework.stereotype.Component;/** * Created with IntelliJ IDEA. * * @author : zhangliang * @version : 1.0 * @project : java-learning * @package : com.cunyu.springbootfreemarkerdemo.entity * @className : User * @createTime : 2021/11/30 21:55 * @email : 747731461@qq.com * @公众号 : 村雨遥 * @website : https://cunyu1943.github.io * @description : */@Component@Data@AllArgsConstructor@NoArgsConstructorpublic class User {    private int age;    private String name;    private String email;}

编写 Controller

这里咱们创立一个 User 对象,而后设置其年龄、Email、姓名等相干信息,而后将其加到属性中,不便传输到前端进行展现。

package com.cunyu.springbootfreemarkerdemo.controller;import com.cunyu.springbootfreemarkerdemo.entity.User;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.GetMapping;/** * Created with IntelliJ IDEA. * * @author : zhangliang * @version : 1.0 * @project : java-learning * @package : com.cunyu.springbootfreemarkerdemo.controller * @className : UserController * @createTime : 2021/11/30 22:04 * @email : 747731461@qq.com * @公众号 : 村雨遥 * @website : https://cunyu1943.github.io * @description : */@Controllerpublic class UserController {    @GetMapping("/index")    public String index(Model model) {        User user = new User();        user.setAge(26);        user.setEmail("747731461@qq.com");        user.setName("村雨遥");        model.addAttribute("user", user);        return "index";    }}

数据渲染

当实现实体类和 Controller 编写后,咱们就能够利用模板来进行展现了。咱们在我的项目的 resources/templates 路进行新建一个 index.ftl 文件,留神这里文件名要放弃和 Controller 中 index 办法所返回的字符串统一。

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>FreeMarker 试验</title></head><body>    <table>        <tr>            <td>姓名</td>            <td>年龄</td>            <td>Email</td>        </tr>        <tr>            <td>${user.name}</td>            <td>${user.age}</td>            <td>${user.email}</td>        </tr>    </table></body></html>

测试

将咱们的我的项目启动起来,而后在浏览器中拜访如下门路:

http://localhost:8080/index

如果显示如下图中的信息,那么就阐明咱们此次的整合工作顺利完成!

总结

以上就是 Spring Boot 整合 FreeMarker 的具体过程了,能够联合之前的文章:Spring Boot 整合 Thymeleaf 实例独特浏览,比照 Thymeleaf 和 FreeMarker 在整合过程中的一些共同点和不同点,置信你会有更多的播种。

最初,对于本文案例代码,我曾经上传到 Github,有须要的小伙伴能够自取:传送门。