进阶篇-SpringBoot2.x整合Freemarker 模板引擎

进阶篇-SpringBoot2.x整合Freemarker 模板引擎

编码文章call10242025-02-17 11:14:559A+A-

1.Freemarker介绍

1.1 Freemarker简介

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

模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。

官网显示的使用图解:

当然,在非HTML场景下的模板使用也可以用如下图进行解释:

官网:
https://freemarker.apache.org/

在线手册:
模板常用语法,可以参考这个中文在线手册,这里不再赘述
http://freemarker.foofun.cn/

1.2 FreeMarker特性

FreeMarker是基于Java的模板引擎,最初专注于使用MVC软件体系结构进行动态网页生成。使用Freemarker的主要优点是将表示层和业务层完全分开。
开发人员可以处理应用程序代码,而设计人员可以处理html页面设计。最终,使用freemarker可以将它们组合在一起以给出最终的输出页面。

1.3 FreeMarker功能

  • 强大的模板语言:条件块,迭代,赋值,字符串和算术运算和格式,宏和函数(包括其他模板),默认转义(可选)等。
  • 多用途,轻量级:零依赖性,任何输出格式,可以从任何位置加载模板(可插拔),许多配置选项。
  • 国际化/本地化意识:区域设置敏感的数字和日期/时间格式,本地化的模板变体。
  • XML处理功能:将XML DOM放入数据模型并遍历它们,甚至进行声明式处理。
  • 通用的数据模型:Java对象通过可插拔适配器以变量树的形式暴露给模板,该适配器决定了模板如何使用。

总结一下优势就是:FreeMarker可将业务逻辑与表现层分离,有利于分工合作,提高开发效率。同时有利于提高访问速度,提升并发量,对SEO也更加友好。

2. SpringBoot集成Freemarker

整体代码结构如下:

2.1 maven 依赖

在pom文件中引入freemarker,当然在SpringBoot中是通过引入SpringBoot已经提供好的starter。完整的pom依赖引入如下:


        
        
            org.springframework.boot
            spring-boot-starter-freemarker
        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.projectlombok
            lombok
        
    

2.2 配置文件

spring:
  application:
    name: springboot-freemarker
  freemarker:
    # 禁用模板缓存
    cache: false
    # 编码格式
    charset: UTF-8
    # freemarker模板后缀 默认是 .ftlh
    suffix: .html
    # 是否为此技术启用MVC视图分辨率。
    enabled: true
    # Content-Type值
    content-type: text/html
    # #模板加载路径 按需配置 ,默认路径是 classpath:/templates/
    template-loader-path: classpath:/templates/

2.3 演示业务代码

我们建一个用户实体

@Data
public class User {

    private String username;

    private Integer age;

    private String email;

    private String address;
}

创建Controller类并提供请求方法

@Controller
public class UserController {

    @GetMapping("/")
    public String getStudents(Model model) {
        List list = new ArrayList<>();
        User userOne = new User();
        userOne.setUsername("小明");
        userOne.setAge(12);
        userOne.setEmail("xxx@qq.com");
        userOne.setAddress("安徽省合肥市");
        list.add(userOne);

        User userTwo = new User();
        userTwo.setUsername("小红");
        userTwo.setAge(13);
        userTwo.setEmail("xxx@126.com");
        userTwo.setAddress("安徽省合肥市");
        list.add(userTwo);

        model.addAttribute("users", list);
        return "users";
    }
}

users.html页面代码如下:




    
    用户列表



    <#list users as user>
    
名称 年龄 邮件 地址
${user.username} ${user.age} ${user.email} ${user.address}

2.4 测试结果

启动项目,我们打开链接http://127.0.0.1:8080/



点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4