freemarker面试题
freemarker介绍
FreeMarker是一种模板技术,我们可以基于FreeMarker生成各种文件,在公司我们是用freemarker的模板文件生成html静态文件
模板的组成:静态文本+插值+FTL标签+注释
在模板文件中使用freeMarker指令动态生成静态文件
(
FreeMarker是一个用Java语言编写的模板引擎,基于模板来生成文本输出。FreeMarker不依赖于web容器。它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。
通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据。
FreeMarker是免费的。
能够生成各种文本:HTML、XML、RTF、Java源代码等等。
支持的类型:
标量:字符串、数字、布尔值、日期
容器:哈希表、序列、集
子程序:方法、自定义指令
自定义指令
利用<#macro...>指令
如:
<#macro table u>//第一个是自定义指令的名字,第二个是自定义指令的参数
${u}
</#macro>
<@table u=8 />
)
插值
插值${…}
FTL标签
if标签和if else标签:用于判断
<#if user == "Big Joe">, our beloved leader</#if>
<#if animals.python.price < animals.elephant.price>
Pythons are cheaper than elephants today.
<#else>
Pythons are not cheaper than elephants today.
</#if>
list标签:用于循环list中多的内容
<#list animals as being>
<tr>
<td>${being.name}</td>
</tr>
</#list>
include标签:用于插入其他文件内容
<body>
<h1>Test page</h1><p>Blah blah...
<#include "/copyright footer.html">
</body>
assign标签:自定义变量
1:
<#assign x=0 />
${x}
2:
<#assign x="${world}" />
${x}
3:
<#assign x>世界太好了</#assign>
${x}
4:
<#assign x>
<#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n>
${n}
</#list>
</#assign>
${x}
处理不存在的变量!和??
!设置默认值,当user这个变量不存在时用!后面的值显示
<h1>Welcome ${user!"Anonymous"}!</h1>
??常和if标签一起使用判断变量是否存在,存在的时候才会处理显示if标签包括的内容
<#if user??>h1>Welcome ${user}!</h1></#if>
FTL指令<#if>,<#list …>,<#include>等
注释
注释:<#--和-->
freemarker的使用
导入要用到的包,在spring的配置文件中配置freeMarker视图解析器FreeMarkerViewResolver,模板文件路径,模板编码等信息,在指定位置建立模板文件,向模板文件中填充数据即可
利用freemarker包中的Template类对象可以将完成填充数据的模板输出到不同的流(如文件流可以输出成不同文件)
freemarker原理
模板文件存放在Web服务器上,当有人来访问这个页面,FreeMarker就会介入执行,然后动态转换模板,用最新的数据内容替换模板中${...}的部分,之后将结果发送到访问者的Web浏览器中。访问者的Web浏览器就会接收到例如第一个HTML示例那样的内容(也就是没有FreeMarker指令的HTML代码),访问者也不会察觉到服务器端使用的FreeMarker。(存储在Web服务器端的模板文件是不会被修改的;替换也仅仅出现在Web服务器的响应中。)

浙公网安备 33010602011771号