这里写图片描述

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

这里写图片描述

Freemarker功能金字塔
这里写图片描述

FreeMarker特点
强大的模板语言:条件块,迭代,赋值,字符串和算术运算和格式,宏和函数,包括其他模板,默认情况下转义(可选)等等

多用途和轻量级:零依赖性,任何输出格式,可以从任何地方(可插入)加载模板,许多配置选项

国际化/本地化感知:区域设置敏感数字和日期/时间格式,本地化模板变体。

XML处理功能:将XML DOM-s放入数据模型并遍历它们,甚至以声明方式处理它们

多功能数据模型:Java对象通过可插拔适配器作为变量树公开给模板,后者决定模板如何看待它们。

这里写图片描述

模板文件
这里写图片描述

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

附代码:
POM.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.test</groupId>
  <artifactId>Proj_Blog</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>Proj_Blog Maven Webapp</name>
  <url>http://maven.apache.org</url>

    <!-- 父类POM文件 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath/>
    </parent>

      <dependencies>
        <!-- SpringBoot启动Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>
        <!-- 支持在线开发部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
            <scope>true</scope>
        </dependency>
        <!-- 数据源 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.11</version>
            <exclusions>
                <exclusion>  
                    <groupId>com.alibaba</groupId>
                    <artifactId>jconsole</artifactId>
                </exclusion>  
                <exclusion>
                    <groupId>com.alibaba</groupId>
                    <artifactId>tools</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- SpringBoot对JSP支持依赖 -->
        <dependency> 
            <groupId>org.apache.tomcat.embed</groupId> 
            <artifactId>tomcat-embed-jasper</artifactId> 
            <scope>provided</scope> 
        </dependency> 
        <dependency>
            <groupId>javax.servlet</groupId> 
            <artifactId>jstl</artifactId> 
        </dependency>
        <!-- Mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!-- 分页插件 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.1.2</version>
        </dependency>
        <dependency>
          <groupId>org.freemarker</groupId>
          <artifactId>freemarker</artifactId>
          <version>2.3.23</version>
        </dependency>
      </dependencies>

  <build>
    <finalName>Proj_Blog</finalName>
  </build>
</project>

模板文件

<html>
    <head>
        <title>第一个FreeMarker模板</title>
    </head>
    <body>
        你好,${name}
    </body>
</html>

测试类

package com.test.blog.freemarker;

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.Template;

public class Unit01Tester {

    public static void main(String[] args) {
        try
        {
            //1.定义Freemarker配置对象
            Configuration config = new Configuration(Configuration.VERSION_2_3_23);
            //2.指明Freemarker模板加载目录 Class
            config.setClassForTemplateLoading(Unit01Tester.class, "./");
            //3.通过模板文件名取得模板对象
            Template tmplt = config.getTemplate("unit01.ftl");
            //4.定义数据模型
            Map<String,String> m = new HashMap<String,String>();
            m.put("name","Java");

            OutputStreamWriter osw = new OutputStreamWriter(System.out);
            BufferedWriter bw = new BufferedWriter(osw);
            //5.合并模板+数据模型
            tmplt.process(m, bw);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

}
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐