结合最近在公司用到的FreeMarker 页面静态化及动态生成页面 做一个总结归纳:
首先我们在学习FreeMarker之前我们首先要了解FreeMarker是做什么的?
FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写。
FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序。
虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据
通俗一点来讲,FreeMarker就是一种基于模板的、用来生成输出文本的通用工具,基于Java的开发包和类库用来生成输出文本的通用工具,基于Java的开发包和类库。
讲了这么多,那么FreeMarker到底如何使用,它的优点儿在哪儿,我们为什么要使用它,接下来,根据我这一段时间的学习及在项目实战中的应用下面对FreeMarker做一个简单的介绍:
一、为什么要用FreeMarker?它的特性有哪些?
t特性
1.分离表现层和业务逻辑
使用JSP开发过程中在页面中大量的存在业务逻辑的代码,使得页面内容凌乱,在后期大量的修改维护过程中就变得非常困难。FreeMarker根本不支持Java脚本代码,而是使用el表达式来输出展示数据。FreeMarker的设计初衷就是:模板+数据模型=输出,模板只负责数据在页面中的表现,不涉及任何的逻辑代码,而所有的逻辑都是由数据模型来处理的。用户最终看到的输出是模板和数据模型合并后创建的。
3.智能的国际化和本地化
字符集智能化(内部使用UNICODE)、数字格式本地化敏感、日期和时间格式本地化敏感、非US字符集可以用作标识(如变量名)、多种不同语言的相同模板
2.提高开发效率
在我们以往的开发中,使用的都是JSP页面来展示数据的,即所谓的表现层。我们都知道,JSP在第一次执行的时候需要转换成Servlet类,开发阶段进行功能调适时,需要频繁的修改JSP,每次修改都要编译和转换,那么试想一天中我们浪费在程序编译的时间有多少。相对于JSP来说,FreeMarker模板技术不存在编译和转换的问题,所以就不会存在上述问题。而且开发过程中,我们在不必在等待界面设计开发人员完成页面原形后,我们再来开发程序。
3. 分工明确
以往用JSP展现数据时,程序员并不熟悉界面设计技术,反之界面开发人员,也并不熟悉程序语言。协调工作很困难,使用FreeMarker后,作为界面开发人员,只专心创建HTML文件、图像以及Web页面的其他可视化方面,不用理会数据;而程序开发人员则专注于系统实现,负责为页面准备要显示的数据。
首先我们来对Freemarker有一个初略的认识,在这一章中,我们要学会如何写出一个简单但是非常有效的Freemarker模板。
案例 :1.模板+数据模型=输出
首先新建一个JavaProject
1.1新建一个文件夹存放 Freemarker 模板文件 后缀名为.ftl
1.2创建一个包和一个class 类
代码实例:
package com.wky.fm;
import java.io.File;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class TestFreeMarker {
@SuppressWarnings("test_FM")
public static void main(String[] args) throws Exception {
//创建freemarker配置实例
Configuration cfg = new Configuration();
//设置模板加载的目录
cfg.setDirectoryForTemplateLoading(new File("test_fm"));
//创建数据模型
Map
map = new HashMap
();
map.put("user", "张三");
//加载模板文件
Template template = cfg.getTemplate("test.ftl");
//显示生成数据
Writer out = new OutputStreamWriter(System.out);
template.process(map, out);
out.flush();
out.close();
}
}
1.3在模板中写测试代码
1.4 Demo测试 在控制台打印输出 模板信息