Freemark

本文深入解析Freemarker模板引擎,涵盖其定义、应用场景、工作原理及使用方法。从页面静态化生成到合同与邮件模板制作,再到代码自动生成,详述了Freemarker在Java开发中的强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是Freemark?

  • 定义:是一个java语言开发的模板引擎

  • 场景:

    • 页面静态化生成(把一个动态加载数据的页面生成html的过程,叫静态化)
    • 合同模板生成
    • 邮件模板生成
    • 自动生成代码
  • 原理/组成:

    • Template:模板
    • Model:模板要用到的数据
    • Output:模板+数据渲染后生成的静态html

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vkcdGvk8-1597565608881)(%E7%AC%94%E8%AE%B0.assets/image-20200810154719690.png)]

  • 使用:

    • 导包

      <dependency>
          <groupId>org.freemarker</groupId>
          <artifactId>freemarker</artifactId>
          <version>2.3.23</version>
      </dependency>
      
    • 开发功能

      • 准备模板

        <html>
        <head>
        <meta charset="utf-8">
        <title>Freemarker入门</title>
        </head>
        <body>
        <#--我只是一个注释,我不会有任何输出 -->
        ${name}你好,${message},${user.name}
        </body>
        </html>
        
      • 使用模板输出内容

        • 加载模板

          //1.创建配置类
          Configuration configuration=new Configuration(Configuration.getVersion());
          //2.设置模板所在的目录
          configuration.setDirectoryForTemplateLoading(new File("D:\\ftl"));
          //3.设置字符集
          configuration.setDefaultEncoding("utf-8");
          //4.加载模板
          Template template = configuration.getTemplate("test.ftl");
          
        • 准备数据

          Map map=new HashMap();
          map.put("name", "张三");
          map.put("message", "欢迎来到传智播客!");
          map.put("user", new User());
          
        • 使用Freemark生成内容

          // 第一个参数是数据model
          // 第二个参数是结果的输出流对象
          template.process(map, out);
          

Freemark的语法

assign定义的变量比Java变量的优先级高

  • 基本语法

    • 1、文本,直接输出的部分
    • 2、注释,即<#–…-->格式不会输出
    • 3、插值(Interpolation):即${…}部分,将使用数据模型中的部分替代输出
    • 4、FTL指令:FreeMarker指令,和HTML标记类似,名字前加#予以区分,不会输出
  • FTL指令

    • assign,在模板页面中定义一个变量

      <#assign info={"mobile":"13812345678",'address':'北京市昌平区'} >
      电话:${info.mobile} 地址:${info.address}
      
    • include,引入其他页面到当前模板中

      <#include "head.ftl"/>
      
    • if else 指令,用于判断条件

      <#if success=true>
      你已通过实名认证
      <#elseif success=true>
      你已通过实名认证
      <#else>
      你未通过实名认证
      </#if>
      
    • list 指令,用于遍历集合

      • as固定语法
      <#list goodsList as goods>
      商品名称: ${goods.name} 价格:${goods.price}<br>
      </#list>
      
    • 内置函数

      • 日期
      Last updated date: ${lastUpdated?string('yyyy-MM-dd')}<br>
      Last updated date: ${lastUpdated?date}<br>
      Last updated time: ${lastUpdated?time}<br>
      Last updated time: ${lastUpdated?datetime}<br>
      

静态生成

  • (1)什么时候生成静态页面比较合适呢?
    • 套餐、检查组、检查项 CRUD时需要重新生成静态页面
  • (2)将静态页面生成到什么位置呢?
    • 生成在webapp下的一个静态页面文件夹
    • 生成一个文件,放置到nginx的目录
  • (3)应该生成几个静态页面呢?
    • 套餐列表
    • 套餐详情(多个页面)

Spring集成Freemark

  • 导包

     <dependency>
         <groupId>org.freemarker</groupId>
         <artifactId>freemarker</artifactId>
         <version>2.3.23</version>
    </dependency>
    
  • 配置

    <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <!--指定模板文件所在目录-->
        <property name="templateLoaderPath" value="/WEB-INF/ftl/" />
        <!--指定字符集-->
        <property name="defaultEncoding" value="UTF-8" />
    </bean>
    

指定模板文件所在目录–>

  <property name="templateLoaderPath" value="/WEB-INF/ftl/" />
  <!--指定字符集-->
  <property name="defaultEncoding" value="UTF-8" />
```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值