FreeMarker 是一个 Java 开发的模板引擎,功能类似的还有 Apache 项目中的 Velocity ,关于比较二者功能的文章也很多。
技术本身没有高低之分,根据自己的实际情况来选择,我本人更喜欢 FreeMarker ,主要有两个用途:
1、利用 FreeMarker 模板代替 JSP 技术显示界面。
实现比较简便,FreeMarker 也有相应的例子。大概的过程如下:
首先在 Servlet 里面初始化配置,只需要初始化一次,所以可放在 init() 方法内部
再根据请求的路径取得模板文件对象
最后构造需要传递到模板的 Map 数据,生成页面并返回
详细的代码可以参考自带的例子。
2、利用 FreeMarker 模板自动生成部分程序代码。
开发过程中,很多重复的增删改查的 Java 代码和页面代码,有时候很多的工作都在复制和粘贴。
因为代码存在相似性,所以可以将共性其写成 FreeMarker 的模板,不同的地方可以作为变量,从而自动生成程序代码。
基本的过程与生成 WEB 页类似,只不过生成页面的方法小改一下:
技术本身没有高低之分,根据自己的实际情况来选择,我本人更喜欢 FreeMarker ,主要有两个用途:
1、利用 FreeMarker 模板代替 JSP 技术显示界面。
实现比较简便,FreeMarker 也有相应的例子。大概的过程如下:
首先在 Servlet 里面初始化配置,只需要初始化一次,所以可放在 init() 方法内部
// 模版文件的路径
String templatePath = WebConfig.get().getTemplatePath();
//多模板路径配置,单个模板路径可使用
//cfg.setServletContextForTemplateLoading(getServletContext(), templatePath);
WebappTemplateLoader wtl = new WebappTemplateLoader(getServletContext(), templatePath);
ClassTemplateLoader ctl = new ClassTemplateLoader(this.getClass(), "/template");
TemplateLoader[] loaders = new TemplateLoader[] { wtl, ctl };
MultiTemplateLoader mtl = new MultiTemplateLoader(loaders);
cfg.setTemplateLoader(mtl);
// 设置检测模版是否更新的时间
if (debug) {
cfg.setTemplateUpdateDelay(0); // 不缓存模板文件
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.HTML_DEBUG_HANDLER);
} else {
cfg.setTemplateUpdateDelay(60);
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
}
// Use beans wrapper?(recommended for most applications)
cfg.setObjectWrapper(ObjectWrapper.BEANS_WRAPPER);
// 设置模版文件的编码
cfg.setDefaultEncoding(WebConfig.get().getTemplateEncoding());
// 设置输出编码
cfg.setOutputEncoding(characterEncoding);
// 设置数字显示格式
cfg.setNumberFormat("#.##"); //防止数字中出现逗号
// 设置日期显示格式
cfg.setDateFormat("yyyy-MM-dd");
cfg.setDateTimeFormat("yyyy-MM-dd HH:mm:ss");
再根据请求的路径取得模板文件对象
// uri 为模板文件路径
Template t = cfg.getTemplate(uri);
最后构造需要传递到模板的 Map 数据,生成页面并返回
// rootMap 类型是 HashMap
t.process(rootMap, response.getWriter());
详细的代码可以参考自带的例子。
2、利用 FreeMarker 模板自动生成部分程序代码。
开发过程中,很多重复的增删改查的 Java 代码和页面代码,有时候很多的工作都在复制和粘贴。
因为代码存在相似性,所以可以将共性其写成 FreeMarker 的模板,不同的地方可以作为变量,从而自动生成程序代码。
基本的过程与生成 WEB 页类似,只不过生成页面的方法小改一下:
// 生成到指定的文件名
t.process(context, new PrintWriter(new FileOutputStream(filePath + "/" + export)));