Freemarker

##Freemarker

1.减少访问数据库的次数,减少服务器的压力
2.网页静态化有利于SEO(搜索引擎优化)
3.静态页面之后,可以部署在Nginx里,可以承载5W的并发

####原理

读取模板,将模板中的变量用JAVA objects来替换最后用IO的方式输出。

在这里插入图片描述

入门Demo

1.引入依赖

<dependency> 
  <groupId>org.freemarker</groupId> 
  <artifactId>freemarker</artifactId> 
  <version>2.3.23</version> 
</dependency>

2.创建文件模板

模板的四种元素

1.文本,直接输出的部分

2.注释,<#-- -->

3.插值,${…},使用数据模型中的部分替代输出

4.FTL FreeMarker指令,与HTML标记类似,名字前面加#区分,不输出

创建模板

1.在resource下创建 test.ftl

<html> 
<head> 
 <meta charset="utf-8"> 
 <title>Freemarker 入门小 DEMO </title> 
</head> 
<body> 
<#--我只是一个注释,我不会有任何输出  --> 
$你好。{name},你好。${message} 
</body> 
</html> 

2.生成文件(在java目录下面)

使用步骤:
第一步:创建一个 Configuration 对象,直接 new 一个对象。构造方法的参数就是 freemarker 的版本号。
第二步:设置模板文件所在的路径。
第三步:设置模板文件使用的字符集。一般就是 utf-8.
第四步:加载一个模板,创建一个模板对象。
第五步:创建一个模板使用的数据集,可以是 pojo 也可以是 map。一般是 Map。
第六步:创建一个 Writer 对象,一般创建一 FileWriter 对象,指定生成的文件名。
第七步:调用模板对象的 process 方法输出文件。
第八步:关闭流

代码部分:

public ststic void main(String[] args){
  //1.创建配置类 (Configiration静态化方法获得版本号)
  Configuration configuration=new Configuration(Configuration.getVersion()); 
  //2.设置模板所在的目录  
  configuration.setDirectoryForTemplateLoading(new 
File("D:/pinyougou_work/freemarkerDemo/src/main/resources/")); 
  //3.设置字符集 
  configuration.setDefaultEncoding("utf-8"); 
  //4.加载模板 
  Template template = configuration.getTemplate("test.ftl"); 
  //5.创建数据模型 
  Map map=new HashMap(); 
  map.put("name", "张三 "); 
  map.put("message", "欢迎光临!"); 
  //6.创建 Writer 对象 
  Writer out =new FileWriter(new File("d:\\test.html")); 
  //7.输出 
  template.process(map, out); 
  //8.关闭 Writer 对象 
  out.close();
  }
FTL指令

#####1.简单类型:

<#assign linkman="周先生"> 
联系人:${linkman} 

在这里插入图片描述

#####2.定义对象类型

<#assign info={"mobile":"123456789"},{"address":"河道边"}

电话:${info.mobile}  地址:${info.address}

#####3.include 模板文件的嵌套

3.1 创建新的模板head.ftl

<h1>此处将被添加到test.ftl模板中</h1>

3.2 在test.ftl中添加head.ftl

<#include "head.ftl">

#####4.if指令

<#if success=true>

已经认证通过

<#else>

未通过

<#/if>

在上述的main方法中,加上

map.put("success",true)

注意:在freemarker里,== 和= 的意义是一样的

#####5.list指令

5.1在test.ftl中添加

<#list goodsList as goods>

${goods_index+1} 商品名称:${goods.name} 商品价格:{$goods.price}

<#/list>

5.2 在main方法中对变量goodsList赋值

List goodsList = new ArrayList();
Map goods1 = new HashMap();
goods1.put("name","苹果");
goods1.put("price",5.8);
Map goods2 = new HashMap();
goods2.put("name","香蕉");
goods2.put("price",2.5);
Map goods3 = new HashMap();
goods3.put("name","橘子");
goods3.put("price",3.2);
goodsList.add(goods1);
goodsList.add(goods2);
goodsList.add(goods3);
map.put("goodsList",goodsList);

在这里插入图片描述

6.内建函数

内奸函数语法格式:变量+?+函数名称

6.1 获取集合大小

使用size函数实现

共${goodsList?size}条记录

6.2 将JSON字符串转换成对象

<#assign text="{'bank':'工商银行','account':'10101920201920212'}" /> 
 <#assign data=text?eval /> 
 开户行:$账号:{data.bank}  账号:${data.account} 

6.3 日期格式化

在main方法中对变量赋值:

dataModel.put("today",newDate());

在模板文件中加入

当前日期:${today?date}
当前时间:${today?time}
当前日期+时间:${today?datetime}
日期格式化:${today?string("yyyy年MM月")}

在这里插入图片描述

6.4 数字转换成字符串

在main方法中加入

map.put("point", 102920122); 

在test.ftl中修改

累计积分:${point}

显示效果:累计积分:102920122
累计积分:${point?c}

显示效果:累计积分:102,920,122

6.5 空值处理运算符

如果你在模板中使用了变量但是在代码中没有对变量赋值,那么运行生成时会抛出异常。但 是有些时候,有的变量确实是 null,怎么解决这个问题呢?

6.5.1 判断变量是否真实存在

语法:variable?? 如果变量真实存在,返回true,不存在返回false
<#if a??>
a变量存在
<#else>
a变量不存在
</#if>

6.6 缺失变量默认值: “!”

除了可以判断是否为空值,也可以使用 ! 对 null值做转换处理
在test.ftl中加入

 ${a!'-'} 

a为变量,内容为- 即使main方法中 不对a赋值,也不会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值