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服务器的响应中。)

 

posted @ 2023-02-01 15:01  星光闪闪  阅读(273)  评论(0)    收藏  举报