FreeMarker

FreeMarker是什么

FreeMarker基本语法

基本使用案例


FreeMarker是什么

image-20240316150238579

如官方文档写的一般,FreeMarker是一款模板引擎:基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具

也就是说,基于FreeMarker,你可以对已有的模板进行“换皮”:修改特定的字段–把所有时间换位当天;添加特定的数据–依据传入快速生成列表等等

FreeMarker基本语法

FreeMarker文件(FTL .ftl 文件)主要为以下四部分混合而成

  • 文本:静态部分,会原封不动的输出

  • 插值:会被替换掉的值,由 ${ } 中的对象属性值替换

    • 默认值设置使用 !

      • ${user!”用户为空”} user为空时返回 用户为空
    • 内建函数使用?

      • ${user_name?upper_case} 把user_name里面的全部字符转换为大写
      • $(user?index) 获取用户的下标(user是users数组遍历的对象)
  • FTL标签:类似于HTML的标签,用于给与FreeMarker指示,如<#if 判断> 可以进行if判断、<#list 数组 as 个体>可以进行遍历等

  • 注释:用于提示开发人员的文本信息,会被FreeMarker忽视,由 <#– –> 分隔

基本使用案例

第一步: 引入Jar包

        <!-- https://freemarker.apache.org/index.html -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.32</version>
        </dependency>

第二步:编写模板

创建.ftl文件

<html>
<head>
    <title>IT蛋官网</title>
</head>
<body>
    <h1>欢迎来到IT蛋的简单模板页面</h1>
    <ur>
        <#-- 渲染导航条-FTL标签 -->
        <#list menuItems as item>
            <li> <a href="${item.url}">${item?index} ${item.label}</a></li>
        </#list>
    </ur>
<#-- 底部版权信息 -->
<footer>
    ${currentYear} IT蛋官网.  All rights reserved.
</footer>
</body>
</html>

第三步:基于FreeMarker调用模板

public class FreeMarkerTest {

    @Test
    public void test() throws IOException, TemplateException {
        //new出 Configuration 对象参数为 FreeMarker 版本号
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_32);
        //指定模板文件所在的路径
        configuration.setDirectoryForTemplateLoading(new File("src/main/resources/templates"));
        // 设置模板文件使用的字符集
        configuration.setDefaultEncoding("utf-8");
        configuration.setNumberFormat("0.#####");
        // 创建模板对象,加载指定模板
        Template template = configuration.getTemplate("myweb.html.ftl");
        
        // 使用模板
        ...
        // 结束

        //关闭流
        out.close();
    }

}

//第四步:创建数据模型,调用FreeMarker创建模板

        // 使用模板
        // 创建数据模型
        Map<String, Object> dataModel = new HashMap<>();
        dataModel.put("currentYear", 2024);
        List<Map<String,Object>> menuItems = new ArrayList<>();

        Map<String,Object>menuItem1 = new HashMap<>();
        menuItem1.put("url", "www.baidu.com");
        menuItem1.put("label", "百度");

        Map<String,Object>menuItem2 = new HashMap<>();
        menuItem2.put("url", "www.baidu.com");
        menuItem2.put("label", "百度2");

        menuItems.add(menuItem1);
        menuItems.add(menuItem2);

        dataModel.put("menuItems",menuItems);

        Writer out = new FileWriter("myweb.html");

        // 执行FreeMarker
        template.process(dataModel, out);
        // 结束

结果:– 》

image-20240316151652351

<html>
<head>
    <title>IT蛋官网</title>
</head>
<body>
    <h1>欢迎来到IT蛋的简单模板页面</h1>
    <ur>
                    <li> <a href="www.baidu.com">0 百度</a></li>
            <li> <a href="www.baidu.com">1 百度2</a></li>
    </ur>
<footer>
    2024 IT蛋官网.  All rights reserved.
</footer>
</body>
</html>