CSDN学院学习Freemarker(自己总结,还望多提宝贵意见)
一篇很详细的Freemarker讲解(小demo、Servlet中运用、freemarker语言的各种)
FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具。FreeMarker允许Java servlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。模板用servlet提供的数据动态地生成 HTML。Struts2使用了Freemarker。
如果学过jsp,那么可以通过和jsp对照学习Freemarker。再对比Java中相关方法的调用,还有js的函数、参数等。
语言是相通的。灵活运用。
Template file 模板文件。
Freemarker 不是一个Web应用框架,而适合作为web应用框架的一个组件。
Freemarker与容器无关,因为把并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境。
FreeMarker更适合作为Model2框架(如 Struts)的视图组件,你也可以在模板中使用JSP标记库。
Freemarker中用Map存储。
第一个Freemarker程序走起:
1、普通的Java项目:
2、引入Freemarker.jar
3、项目下建立模板目录:templates(普通文件夹)
4、在文件夹下建一个a.ftl文件:${user}你好!
注:user是Freemarker中map数据中的key
普通Java程序的Freemarker使用四步骤:
Freemarker中放的是树状数据(xml、map、json)
t 1.process(root,out),读取root通过out输出。
Freemarker注释:<#-- -->
~数据类型
数据类型可以是 字符串、布尔值、Map、集合、数值。
字符串:直接指定字符串值使用单引号或者双引号限定。字符串中可以使用转义字符“\”。如果字符串内有大量的特殊字符,则可以在引号的前面加上一个字母r,则字符串内所有的字符都将直接输出。
数值:数值可以直接输入,不需要引号,Freemarker不支持科学计数法(12e6)。
布尔值:直接使用true或false,不使用引号。
Map对象:Map对象使用花括号包括,Map中的key-value对之间用冒号分隔,多组key-value对之间用逗号分隔。(有点像json数据对象)
注:Map 对象的key和value都是表达式,但key必须是字符串。
集合:集合用中括号包括,几何元素之间用逗号分隔。使用数字范围也可以表示一个数字集合,如1..5等同于集合[1,2,3,4,5];5..1等同[5,4,3,2,1]。(类似json中的数组)
其他:
If指令
大于、小于用gt、lt,如果用>或< 则可能被解释为标签的结束。
List指令:
Include指令:
<#include “文件”>
自定义指令(macro指令)宏指令:
在定义后,在用到的任何地方都可以调用。
带参的宏指令:其实类似于js中的参数(可以类型自动转换),参数通过空格分开。
<#macro m2 a b>
${a}--${b}
</#macro>
引用:<@m2 “nihao”23> 这里可以传上面讲的数据类型,Freemarker自动转换。
<#nested>指令:类似jsp中的<#include>指令 还是<jsp:include>(这个我忘了?)
问题:宏定义中,有没有类似于方法的返回值?
命名空间:
注意,<#import>的起别名
其中<#assign>指令(注意in的使用),定义变量。(Freemarker中还有好几种定义变量的方法—-- 局部,全局),要搞清楚在用。这个变量知识,我随后专门博客介绍。
命名规则:
输出变量值:
解释一下:输出集合元素,如果想输出全部值,直接用索引即可(如:number)
解释:??相当于user!=null的判断
数据类型:
Servlet中使用Freemarker:
解释:放struts-tags.tld文件是为了让Freemarker也用struts标签。
上面的配置是Freemarker对jsp的支持。
下面是struts.xml配置文件
下面是ftl文件:
解释:注意要想使用struts标签,要写最上面一句的引入代码。
引用struts标签时,需要<@s 这种格式。(想了解更多,可以去百度Freemarker怎么用struts标签)
用.ftl文件。我们可以查看源文件,便会发现模板和数据结合后被浏览器解析了。