FreeMarker简介及使用示例

一、简介

FreeMarker 是一个用 Java 语言编写的模板引擎,它基于模板来生成文本输出。其原理如下图所示:

FreeMarker最初的设计,是被用来在MVC模式的Web开发框架中生成HTML页面的,没有被绑定到Servlet或HTML或任意Web相关的东西上,它也可以用于非Web应用环境中。

FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP,故此FreeMarker不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java等各种文本文件。总之,FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写,模板中没有业务逻辑,外部Java程序通过数据库操作等生成数据传入模板(template)中,然后输出页面。它能够生成各种文本:HTML、XML、RTF、Java源代码等等,而且不需要Servlet环境,并且可以从任何源载入模板,如本地文件、数据库等等。 

二、使用

引包 

<dependency>

  <groupId>org.FreeMarker</groupId>

  <artifactId>FreeMarker</artifactId>

  <version>2.3.29</version>

</dependency>

spring应用可以这样使用

compile"org.springframework.boot:spring-boot-starter-freemarker:$springBootVersion"

具体使用过程

// 第一步:创建一个Configuration对象,直接new一个对象。构造方法的参数就是FreeMarker对于的版本号。

Configuration configuration = new Configuration(Configuration.getVersion());

// 第二步:设置模板文件所在的路径。

configuration.setDirectoryForTemplateLoading(new File("/WEB-INF/ftl"));

// 第三步:设置模板文件使用的字符集。一般就是utf-8.

configuration.setDefaultEncoding("utf-8");

 // 第四步:加载一个模板,创建一个模板对象。

 Template template = configuration.getTemplate("hello.ftl");

// 第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map。

Map dataModel = new HashMap<>();

//向数据集中添加数据

dataModel.put("hello", "this is my first FreeMarker test.");

// 第六步:创建一个Writer对象,一般创建一FileWriter对象,指定生成的文件名。

 Writer out = new FileWriter(new File("/hello.html"));

// 第七步:调用模板对象的process方法输出文件。

template.process(dataModel, out);

// 第八步:关闭流。

out.close();

三、实例

创建一个模版xxx.ftl,我创建的是student.ftl,置于/templates文件夹下

<table>
    <tr>
        <td>姓名</td>
        <td>年龄</td>
    </tr>
    <#list studentList as student>
        <tr>
            <td> ${student.name}</td>
            <td>${student.age}</td>
        </tr>
    </#list>

</table>

 

因为是引了springboot的freemarker模块,springboot自动生成了一个FreeMarkerConfigurer 的bean,不需要自己去new了。使用FreeMarkerConfigurer 创建一个template的bean,设置template的模版路径为student.ftl【相对FreeMarkerConfigurer 设置的,模版文件路径,默认为/templates】

@Configuration
public class FreeMarkerTemplateConfig {

    @Autowired
    private FreeMarkerConfigurer freeMarkerConfigurer;

    @Bean
    public Template studentTemplate() throws IOException {
        return freeMarkerConfigurer.getConfiguration().getTemplate("student.ftl");
    }
}

使用时引用tempate bean,将模版所需的参数设置到map中,调用tempate 的process函数,根据模版及绑定参数生成结果

    @Autowired
    private Template studentTemplate;

    @Test
    public void testFreeMarker() {
        Student student = new Student();
        student.setName("张三");
        student.setAge(13L);

        Student student1 = new Student();
        student1.setName("李四");
        student1.setAge(14L);

        Writer writer = new StringWriter();
        try {
            Map<String, List<Student>> param = new HashMap<>();
            param.put("studentList", Arrays.asList(student, student1));
            studentTemplate.process(param, writer);
        } catch (Exception e) {
        }
        String s = writer.toString();
    }

生成的结果如下

参考:http://www.freemarker.net/

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值