Freemark快速入门
因为我负责的模块中要使用到freemark,所以我就来学习freemark了,但是在网上找了很多学习资料,蹲了很多的坑,所以决定自己写一篇关于freemark入门的帖子,就当巩固印象把...
进入正题,我们先来讲讲什么是Freemark,
FreeMarker是一个用Java语言编写的模板引擎,它基于模板输出文本(html)。FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。
本质其实就是一个 jar -> 生产静态的HTML文件,
在这提一下另一个技术,thymeleaf 好像也挺火的,,不过我这没有时候,因为thymeleaf开了缓存不稳定等因素,有兴趣的小伙伴
可以研究一下
Freemark原理
嗯,闲话不多讲,我们来讲讲使用把.....
创建一个maven工程,,
pom文件添加依赖
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
然后我们来看测试代码,(下载模板功能模拟)
@Test
public void test_fun01() throws Exception {
//1.创建个configuration对象
Configuration config = new Configuration(Configuration.getVersion());
//2.设置模板所在的文件 this.getClass().getResource("/").toString() resources 目录
config.setDirectoryForTemplateLoading(new File(this.getClass().getResource("/").toString()));
//3.设置模板文件的字符集
config.setDefaultEncoding("UTF-8");
//4.首先创建模板文件,再加载模板文件 模板文件的后缀官方提供是.ftl 其实任何类型都行。
Template template = config.getTemplate("sayHello.ftl");//模板我们之后再创建
//5.创建模板文件需要展示数据的数据集对象,可以使用POJO,也可以使用map 一般是使用map
Map map = new HashMap();
map.put("name","zs");
map.put("age",18);
//6.创建一个FileWriter对象 指定生成的静态文件的文件路径及文件名
FileWriter writer = new FileWriter(new File("D:\\csdn\\freemark\\" + map.get("name") + ".html"));//下载文件
//7.调用模板对象的process方法,执行输出文件。
template.process(map,writer);
// 关闭流
writer.close();
}
嗯,我们在resources目录下创建一个
sayHello.ftl模板文件
嗯,语法的话跟 el表达式差不多的, ${} 就是取值的功能,就不多讲了,我们看看运行结果..
嗯,我们看看生成的模板,,
打开后效果图,
嗯,其实freemark也没什么好讲的了,我们就讲一些语法把,,,
if 判断:
然后我们再运行一遍刚刚的代码,,输出了大于15了,
嗯,然后我们试试获取对象中的属性值,,
1.创建一个pojo,为了测试freemark是怎么取值的,我们在get方法打印一句话
public class Cat {
private String name;
private String habby;
public String getName() {
System.out.println("调用了getName方法,,,,,");
return name;
}
public void setName(String name) {
this.name = name;
}
public String getHabby() {
return habby;
}
public void setHabby(String habby) {
this.habby = habby;
}
}
2.然后我们在创建模板的代码中设置一些pojo
3.修改sayHello.ftl模板
然后我们再运行生成模板的代码,方法输出如下
生成的网页如下...
嗯,我们再讲讲循环的使用把,,
生成模板的代码中添加一个list
修改ftl文件,
list是集合,person是遍历的值(person_index是获取循环中的索引)
运行代码后效果如下,
其实讲到这就以及没什么好讲的了,,,最后我们讲一下遍历map把,,
模板
效果
恩赫,顺便再讲一下日期类型的数据怎么处理的把,
我们先演示正常的获取值的方式,
模板获取
生成模板代码运行
扔出异常如下
我们使用freemark给出的提示解决,,
修改模板代码
运行生成代码:
效果如下
内容真的感觉是越讲越多,,,,又想起要讲的东西了,,,,
处理null字符串
如果表达式获取的值是null,那么就会报错,我就不演示了,,这里就讲讲解决方案
解决方案1.
使用if判断null值,,
效果:
方案2:
左边模板图,右边效果图
!的意思是 , 如果 第一个值是null,就使用第二个默认值,如果不写,就输出一个""字符串
好啦,以上就是freemark的一部分核心,,就讲那么多啦,,,
上一篇: IDEA springboot项目热部署
下一篇: 网页静态化-FreeMark