1.什么是FreeMarker?
FreeMarker是一款模板引擎,一种开源的、基于模板的、用来生成/输出文本的通用工具。
它不是面向最终用户的,不是Web应用框架,它是Java的一个类库,是Web应用框架中的一个实用的组件,是一款可以嵌入开发产品的一款应用程序。
FreeMarker的设计是被用来生成HTML页面,尤其是通过基于实现了MVC模式的Servlet应用程序。
使用MVC模式的动态网页的构思,使得你可以将前端设计从程序中分离出来,更加贴合java的各司其职的编程思想,使得代码更简洁且便于维护。
尽管FreeMarker也有编程能力,但它也不像PHP那样的一种全面的编程语言。
一般我们只使用FreeMarker的模板生成个文本来呈现早已准备好的数据,它仅仅来生成文本,它也非常适用于非 Web应用环境的开发。
要注意的是,我们使用FreeMarker作为视图层组件,是为给如 Struts这样的 Model2框架提供现成的解决方案,已经在一定情况下提高页面的响应速度。
2.FreeMaker的作用:页面静态化
a)JavaEEWeb 开发存在的问题:动态网页技术创建的网页相率低,需要把这些动态网页转换成静态网页,节省程序运行时间
b)是不是把一个系统中所有的网页都进行静态化? 什么样的页面需要静态化?
[1]不是,因为当一个页面静态化之后,所有的写操作都会造成巨大的资源调动,造成更多资源的浪费,
所以我们只将一些修改几率不大或不会修改的页面静态化。
[2]例:电子图书、商品详情信息....
c)CMS系统(Content Manager System) 就是把动态网页静态化
d)页面静态化原理:
3.FreeMaker的第一个程序:
在pom文件中引入freemaker的插件,地址为:http://mvnrepository.com/artifact/org.freemarker/freemarker
a)编码
ftl(模板 由html标签和freemaker的表达式组成)
${name}
后台程序:
//1 获取freemaker配置信息
Configuration cfg = new Configuration("配置文件路径");//freemarker.template.Configuration;
//2 作用这是ftl文件夹的位置
cfg.setDirectoryForTemplateLoading(new File("文件夹路径"));
//3 设置ftl文件的字符集编码
cfg.setDefaultEncoding("UTF-8");
//4 获取对应的使用模板
Template temmplate = cfg.getTemplate("文件名.ftl");
//5 设置模板中需要的动态数据 调用Service-----DAO
Map root = new HashMap();
root.put("name","yongqi_wang");
//6 获取io流 输出 关流
Writer out = new FileWriter(new File("静态网页生成后的存储路径路径/文件名.html"));
template.process(root,out);
out.flush();
out.close();
4.FreeMaker的模板书写
b)有条件的展示数据 key == '值' / key.属性 == '值'
<#if name=='yongqi_wang'>
正确
<#else>
错误
#if>
c)展示多个数据
/** List集合 user的创建过程省略假设拥有id和name两个属性
List users = ArrayList();
users.add(user);
Map root = new HashMap();
root.put("us",users);
*/
<#list us as item>
${item.id}
${item.name}
<#list>
/** Map集合
Map m = new HashMap();
m.put("name","yongqi_wang");
Map root = new HashMap();
root.put("mp",m);
*/
<#list mp?keys as key>//判断map中是否存在key如果包含则将其命名为key
${mp[key]}
#list>
d)日期类型的处理
/**
Map root = new HashMap();
root.put("cdate",new Date());
*/
${cdate?date}//年月日
${cdate?datetime}//年月日时分秒
${cdate?time}//时分秒
${cdate?string('yyyy/MM/dd')}//指定日期格式
e)null值的转换
/**
Map root = new HashMap();
root.put("name",null);
*/
${name!'默认值'}//为空值添加默认值否则报错 可以给空串
///空值错误:Expression name is undeflnad on line............
空值的判断
<#if name??>
不是空的
<#else>
是空的
#if>
f)<#include "其他页面路径"> //包含其他页面
像其他的一些标量、容器什么的如果你了解过的话会发现它没什么特别的就是一个稍微不一样的称呼而已
标量我们可以理解为java中的变量类型:String、数字类型(不区分整数和浮点数)、布尔值、日期类型这几种
容器:
哈希表:可以类比于java中的HashMap使用key-value形式存数元素是无序的
序列:类似于java中的ArrayList,使用类似数组的实现方式通过下标存储但其中存储的元素类型可以不一致
集: 从模板设计者角度来看,集是有限制的序列。不能获取集的大小,也不能通过 索引取出集中的子变量,但是它们仍然可以通过 list 指令来遍历。
基本的语法就介绍到这里,如果你真的想了解更多关于FreeMarker的相关信息和深入原理,可以通过下面的网址来获取资源,也可以直接到FreeMarker官方自行查看。
如果你觉得写的还不错,记得点个赞哟~!!!
链接:https://pan.baidu.com/s/1wXUBDDDa2qouKgqPzHJtnQ 密码:msva
下面是链接中手册的浏览目录内容