文章目录
FreeMarker
一、什么是模板引擎
模板引擎的目标是“数据+模板=结果”
模板引擎将数据与展现有效”解耦“
1、主流模板引擎
Java Server Page:运行效率高
Freemarker:比jsp轻量,开发速度快,上手简单
Beetl:融合了jsp和Freemarker优点,运行效率比FreemMarker高,开发简单
2、FreeMarker
Freemarker是免费开源的模板引擎技术。
Freemarker脚本为ftl结尾的文件中编写,ftl是Freemarker Template Language首字母缩写。
Freemarker提供了大量内建函数来简化开发。
3、JSP与FreeMarker
二、FreeMarker快速上手
//FreemarkerSample.java
public class FreemarkerSample{
public static void main(String[] arg){
//1.加载模板
//创建核心配置对象
Configuration config = new Configuration(Configuration.VERSION_2_3_28);
//设置加载的目录
config.setClassForTemplateLoading(FreemarkerSample.class, "");
//得到模板对象
Template t = config.getTemplate("sample.ftl");
//2.创建数据
Map<String, Object> data = new HashMap<String, Object>();
data.put("site", "百度");
data.put("url","http://www.baidu.com");
//3.产生输出
t.process(data, new OutputStreamWriter(System.out));//向控制台输出
}
}
//sample.ftl
${site}-${url}
//向控制台输出 百度-http://www.baidu.com
1、FTL取值
${属性名} 取值,可对属性进行计算
${属性名!默认值} 属性为空时使用默认值
${属性名?string} 格式化输出,如
– ${date?string(“yyyy年MM日dd日 HH:mm:ss SSS”)}
– ${number?string(“0.00”)}
2、分支判断
if
switch
??代表判断对象是否为空,true不为空,false为空
3、list迭代列表
stu_index 循环的索引,从0开始
4、list迭代Map
LinkedHashMap可以保证数据按存放顺序进行提取
5、内建函数
list?sort_by(“time”)?reverse 降序排序
更多参考freemarker中文参考手册http://freemarker.foofun.cn/
6、FreeMarker与Servlet整合
//web.xml
<servlet>
<servlet-name>freemarker</servlet-name>
<servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
<init-param>
<param-name>TemplatePath</param-name>
<param-value>/WEB-INF/ftl</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>freemarker</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping>
...
//ListServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response){
List list = new ArrayList();
list.add(new Employee(1, "张三1", "市场部"));
list.add(new Employee(2, "张三2", "市场部"));
list.add(new Employee(3, "张三3", "市场部"));
request.setAttribute("employee_list", list);
request.getRequestDispatcher("/employee.ftl").forward(request, response);
}
///WEB-INF/ftl/employee.ftl
<div>
<#list employee_list as emp>
<tr>
<td>${emp.name}</td>
<td>${emp.dept}</td>
</tr>
</#list>
</div>
//FreeMarker模板引擎获取数据时首先从请求中查找,没有再查找会话,再没有查找servletContext,三个都没有才停止程序