前言:使用freemarker对应生成一个html文件,保存到磁盘,访问文件就不一定使用tomcat,可以使用nginx(http服务器)访问。可以使用freemaker工具生成。只生成一次,html静态页面是实实在在存在磁盘上了。

一、 什么是freemarker

FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。

二、 Freemarker的使用方法

第一步:把freemarker的jar包添加到工程中

第二步:freemarker的运行不依赖web容器,可以在java工程中运行。创建一个测试方法进行测试。

第三步:创建一个Configration对象

第四步:告诉config对象模板文件存放的路径。

第五步:设置config的默认字符集。一般是utf-8

第六步:从config对象中获得模板对象。需要指定一个模板文件的名字。

第七步:创建模板需要的数据集。数据集可以是一个map对象也可以是一个pojo,把模板需要的数据都放入数据集。

第八步:创建一个Writer对象,指定生成的文件保存的路径及文件名。

第九步:调用模板对象的process方法生成静态文件。需要两个参数数据集和writer对象。

第十步:关闭writer对象。

代码实现(数据源)

public class FreeMarkerTest {

@Test

public void testFreeMarker() throws Exception {

// 第一步:把freemarker的jar包添加到工程中

// 第二步:freemarker的运行不依赖web容器,可以在java工程中运行。创建一个测试方法进行测试。

// 第三步:创建一个Configuration对象

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

// 第四步:告诉config对象模板文件存放的路径。

configuration.setDirectoryForTemplateLoading(new File("D:\\workspaces-itcast\\JaveEE18\\taotao-portal\\src\\main\\webapp\\WEB-INF\\ftl"));

// 第五步:设置config的默认字符集。一般是utf-8

configuration.setDefaultEncoding("utf-8");

// 第六步:从config对象中获得模板对象。需要制定一个模板文件的名字。

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

// 第七步:创建模板需要的数据集。可以是一个map对象也可以是一个pojo,把模板需要的数据都放入数据集。

Map root = new HashMap<>();

root.put("hello", "hello freemarker");

// 第八步:创建一个Writer对象,指定生成的文件保存的路径及文件名。

Writer out = new FileWriter(new File("D:\\temp\\html\\hello.html"));

// 第九步:调用模板对象的process方法生成静态文件。需要两个参数数据集和writer对象。

template.process(root, out);

// 第十步:关闭writer对象。

out.flush();

out.close();

}

}

模板中的内容:

${hello}

三、Freemarker模板的写法

1、取简单数据类型数据

使用EL表达式。

${hello}

2、包装数据类型

模板:

<html>

<head>

<title>${title}</title>

</head>

<body>

<label>学号:</label>${student.id}<br>

<label>姓名:</label>${student.name}<br>

<label>住址:</label>${student.address}<br>

</body>

</html>

3、 历遍集合/数组

List<Person> persons = new ArrayList<Person>();

省略….

页面中内容

<#list persons as p>   数据集(persons) 对象(p)

${p.id}/${p.name}

</#list>

4、 获得当前迭代的索引(循环中取下标)

List<Person> list = new ArrayList<Person>();

获取当前选代的索引:<br/>

<#list persons as p>

${p_index}     // p_index取下标

</#list>

5、 模板中判断条件

<#if 判断条件>

<#else>

</#if>

逻辑运算符(==   !=   ||   &&)

6、日期类型格式化

默认格式

1:date     生成的日期格式1

${cur_time?date}   ?date告诉freemarker要生成的日期格式

2:datetime    生成的日期格式2

${cur_time?datetime}

3:time        生成的日期格式3

${cur_time?time}

自定义格式

${cur_time?string("yyyy-MM-dd HH:mm:ss")}

7、 处理null值

root.put(“val”,null);

解决办法

1:null 变空串

${val!}     ${val!"这里是空"}    !后面是默认值 加上!可以处理title为空值的情况 为了日后能理解  可以使用“”,在里面添加说明文字

2:为Null时给默认值

${val!“我是默认值"}

3、如果日期为空<#if curdate ??>      ??代表满足的情况下

当前日期:${curdate?string("yyyy/MM/dd HH:mm:ss")}

<#else>

curdate属性为null

</#if>

 8、Include

将另一个页面引入本页面时可用以下命令完成,.ftl并不是必须的,只要能把文件引入就行,这样显规范

<#include "/include/head.html">

三、项目中使用freemarker

使用freemarker整合spring。把Configuration交给spring容器管理。

依赖的jar包:

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context-support</artifactId>

<version>4.1.3.RELEASE</version>

</dependency>

<dependency>

<groupId>org.freemarker</groupId>

<artifactId>freemarker</artifactId>

<version>2.3.23</version>

</dependency>

1.2.1   Spring配置文件

<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>

freemark基础知识的更多相关文章

  1. .NET面试题系列[1] - .NET框架基础知识(1)

    很明显,CLS是CTS的一个子集,而且是最小的子集. - 张子阳 .NET框架基础知识(1) 参考资料: http://www.tracefact.net/CLR-and-Framework/DotN ...

  2. RabbitMQ基础知识

    RabbitMQ基础知识 一.背景 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然 ...

  3. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  4. selenium自动化基础知识

    什么是自动化测试? 自动化测试分为:功能自动化和性能自动化 功能自动化即使用计算机通过编码的方式来替代手工测试,完成一些重复性比较高的测试,解放测试人员的测试压力.同时,如果系统有不份模块更改后,只要 ...

  5. [SQL] SQL 基础知识梳理(一)- 数据库与 SQL

    SQL 基础知识梳理(一)- 数据库与 SQL [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902856.html 目录 What's 数据库 ...

  6. [SQL] SQL 基础知识梳理(二) - 查询基础

    SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...

  7. [SQL] SQL 基础知识梳理(三) - 聚合和排序

    SQL 基础知识梳理(三) - 聚合和排序 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5926689.html 序 这是<SQL 基础知识梳理 ...

  8. [SQL] SQL 基础知识梳理(四) - 数据更新

    SQL 基础知识梳理(四) - 数据更新 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5929786.html 序 这是<SQL 基础知识梳理( ...

  9. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...

随机推荐

  1. pascal语言中学版整理

    P1:主菜单File中的Command shell选项,可以暂时退出Pascal,进入DOS提示符状态,但Pascal仍然驻留在内存中.输入命令exit即可返回Pascal. P3:Edit菜单中Un ...

  2. P1291 [SHOI2002]百事世界杯之旅

    题目描述 “……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听,更克赴日韩观看世界杯.还不赶 ...

  3. JS作用域-面向对象

    1. 其它语言是以代码块作为作用域的.下面程序会报错(如C,C++中),因为局部变量name只在{   }代码块中生效.打印console.writeline(name)中的name时就会报错. pu ...

  4. 【POJ3621】【洛谷2868】Sightseeing Cows(分数规划)

    [POJ3621][洛谷2868]Sightseeing Cows(分数规划) 题面 Vjudge 洛谷 大意: 在有向图图中选出一个环,使得这个环的点权\(/\)边权最大 题解 分数规划 二分答案之 ...

  5. BZOJ1926:[SDOI2010]粟粟的书架——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1926 https://www.luogu.org/problemnew/show/P2468 幸福幼 ...

  6. BZOJ3572:[HNOI2014]世界树——题解

    +++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...

  7. codevs5037 线段树练习4加强版(暴力分块)

    求大爷教线段树怎么写啊QAQ 只会写分块...一开始脑抽写成了O(NKlogN)还被CZL大爷嘲讽了一发T T f[i][j]表示在第i块中,模k为j的数有几个,然后每次修改的时候只需要打个标记,查询 ...

  8. 使用py-faster-rcnn训练VOC2007数据集时遇到问题

    使用py-faster-rcnn训练VOC2007数据集时遇到如下问题: 1. KeyError: 'chair' File "/home/sai/py-faster-rcnn/tools/ ...

  9. What is the bitmap index?

    示例执行计划: postgres ; QUERY PLAN ---------------------------------------------------------------------- ...

  10. HDU3376 最小费用最大流 模板2

    Matrix Again Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others)To ...