您的当前位置:首页正文

Freemarker入门解释 通俗简易版

来源:九壹网

一、Freemarker 是什么?

二、Freemarker 如何使用?

        1.环境搭建(以 Java 项目为例)

                首先,你需要在你的项目中添加 Freemarker 的依赖。如果是 Maven 项目,你要在pom.xml文件中添加以下依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>
  • 这就好比你要做填空题,得先把填空题的试卷模板(Freemarker)拿到手。

        2.创建模板文件

你可以创建一个.ftl(Freemarker 模板文件)文件,比如叫orderConfirmation.ftl。在这个文件中,模板中的插值表达式最终会被freemarker替换成具体的数据。你可以这样写邮件模板:

   尊敬的${customerName},
   您的订单${orderId}已经确认,商品包括:
   <#list productList as product>
       - ${product.name}(数量:${product.quantity})
   </#list>
   总价是${totalPrice}。
   感谢您的购买!
  • 这里的${customerName}${orderId}${productList}${totalPrice}就是变量,<#list>是 Freemarker 的一个指令,用于循环遍历商品列表。这就像是你在试卷模板上把填空题的空白处和一些特殊的答题要求(比如列表答题)都写好了。

        3.在 Java 代码中使用 Freemarker

                首先,你要创建一个Configuration对象,这是 Freemarker 的核心配置对象。

   import freemarker.template.Configuration;
   import freemarker.template.Template;
   import freemarker.template.TemplateException;
   import java.io.File;
   import java.io.IOException;
   import java.io.StringWriter;
   import java.util.ArrayList;
   import java.util.HashMap;
   import java.util.Map;

   public class FreemarkerExample {
       public static void main(String[] args) {
           Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
           try {
               // 设置模板文件所在的目录
               cfg.setDirectoryForTemplateLoading(new File("templates"));
               // 获取模板文件
               Template template = cfg.getTemplate("orderConfirmation.ftl");
               // 创建数据模型
               Map<String, Object> dataModel = new HashMap<>();
               dataModel.put("customerName", "张三");
               dataModel.put("orderId", "123456");
               ArrayList<Product> productList = new ArrayList<>();
               Product product1 = new Product("手机", 1);
               Product product2 = new Product("耳机", 2);
               productList.add(product1);
               productList.add(product2);
               dataModel.put("productList", productList);
               dataModel.put("totalPrice", 5000.0);
               // 合并模板和数据模型
               StringWriter writer = new StringWriter();
               template.process(dataModel, writer);
               System.out.println(writer.toString());
           } catch (IOException | TemplateException e) {
               e.printStackTrace();
           }
       }
   }

   class Product {
       private String name;
       private int quantity;

       public Product(String name, int quantity) {
           this.name = name;
           this.quantity = quantity;
       }

       public String getName() {
           return name;
       }

       public int getQuantity() {
           return quantity;
       }
   }
  • 上面的代码中,首先创建了Configuration对象,然后设置了模板文件所在的目录(templates),接着获取了orderConfirmation.ftl模板。之后创建了一个Map作为数据模型,把顾客姓名、订单编号、商品列表和总价等数据放进去。最后,通过template.process方法把数据模型和模板合并,生成最终的邮件内容并打印出来。这就好比你把具体的答案(顾客信息等数据)填到试卷模板(模板文件)里,然后得到了一份完整的试卷(生成的邮件内容)。

其他解释:

StringWriter是 Java 中的一个类,它属于java.io包。它的主要作用是将字符数据写入一个字符串缓冲区,你可以把它想象成是一个特殊的 “容器”,这个容器专门用来收集字符,最后可以方便地获取这些字符组成的字符串。

  • 在 Freemarker 中的作用(结合上面的例子)

    • 在使用 Freemarker 生成文本(比如上面的订单确认邮件内容)时,template.process方法需要一个Writer对象作为参数来接收生成的文本内容。StringWriter就充当了这个接收者的角色。
    • 就好像是一个工厂(template.process)在生产产品(生成的邮件内容),需要有一个地方来存放这些产品,StringWriter就是这个存放产品的仓库。当template.process方法执行时,它会把根据模板和数据生成的文本内容一个字符一个字符地 “放进” 这个StringWriter中。
    • 最后,通过writer.toString()就可以把StringWriter中收集到的字符内容转换为一个完整的字符串,这样就可以方便地在控制台打印出来或者用于其他用途,比如发送邮件时作为邮件的正文。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top