FreeMarker 是一个 Java 开发的模板引擎,功能类似的还有 Apache 项目中的 Velocity ,关于比较二者功能的文章也很多。
技术本身没有高低之分,根据自己的实际情况来选择,我本人更喜欢 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)));
分享到:
相关推荐
创建自定义标签通常需要两个步骤: 1. **编写Java类**:你需要定义一个处理自定义标签的Java类,这个类需要继承`freemarker.template.TemplateDirectiveModel`接口,并实现其方法。在这个类中,你可以编写处理逻辑...
通过上面的介绍,相信您已经对 Freemarker 如何遍历 List 有了了解,那么我们就废话少说,开始做一个应用吧。好了,到这里程序就结束了,您可以运行 ClientTest 类来查看输出结果了。 Freemarker 中遍历 List 集合...
在本案例中,“freemarker+struts完整代码实例”提供了一个学习这两种技术结合使用的实际项目。初学者可以通过此实例了解如何将FreeMarker与Struts结合,实现动态页面的生成和控制层的处理。 首先,让我们详细了解...
这是一个基础入门案例,旨在帮助初学者快速理解这两个技术的结合。 Spring Boot是一个由Pivotal团队开发的Java框架,它简化了Spring应用的初始搭建以及开发过程。它内置了各种默认配置,使得开发者可以快速地创建...
Struts2是一个强大的MVC(Model-View-Controller)框架,它是Apache软件基金会下的一个开源项目...这将帮助我们深入理解这两个工具的协同工作方式,以及在实际项目中如何有效地利用它们提高开发效率和应用的可维护性。
通过实践这两个案例,你不仅可以巩固Struts2的基础知识,还能对JSP和Freemarker两种模板技术有更深的理解,这对于成为一名专业的Java web开发者至关重要。在实际工作中,选择合适的视图技术取决于项目需求和个人喜好...
在`process`方法中,传入两个参数:一个是数据模型(通常是一个Map对象),另一个是输出目标,如`PrintWriter`或`FileWriter`。在这个过程中,Freemarker引擎会解析模板中的占位符,并用数据模型中的实际值替换它们...
提供的两个小实例将帮助读者更好地理解Freemarker的实际应用: 1. 用户列表展示:一个简单的例子,展示如何使用Freemarker遍历用户列表并显示用户信息,如用户名、邮箱等。 2. 动态生成邮件:另一个实例可能是创建一...
这个实例是一个不依赖数据库、使用相对路径生成文件的基础示例,非常适合初学者了解和学习Freemarker的基本用法。 1. **Freemarker简介** Freemarker是一个开源的模板语言,它与编程语言解耦,允许开发者将业务...
SpringMVC和FreeMarker是两种在Java Web开发中广泛使用的技术。SpringMVC是一个轻量级的、基于组件的Web应用框架,它负责处理HTTP请求并分发到对应的控制器进行处理。而FreeMarker则是一个模板引擎,用于动态生成...
学习并掌握这两个工具的结合使用,能帮助你更好地构建动态、响应式的 Web 应用程序。在实践过程中,可以参考给定的博客链接(https://314858770.iteye.com/blog/966863)获取更多指导和示例。同时,通过练习创建自己...
Struts2.0和FreeMarker是Java Web开发中常用的两个技术框架,它们分别负责MVC模式中的控制器和视图部分。Struts2.0作为一款强大的MVC框架,提供了丰富的功能来简化Web应用的开发,而FreeMarker则是一款模板引擎,...
在代码中,使用FreeMarker API加载模板文件,创建`Template`对象,然后用数据模型实例化`Map`对象。通过`Configuration`对象的`process`方法,将模板与数据模型合并,生成Word文档的字节流。最后,你可以选择将这个...
例如,我们可以定义一个名为`images`的List,其中每个元素包含`imageData`和`altText`两个属性。 然后,使用FreeMarker的`Template`类加载模板,并用`freemarker.template.Configuration`实例进行配置。在配置过程...
Struts2和FreeMarker是两种在Java Web开发中广泛应用的技术。Struts2是一个基于MVC(Model-View-Controller)架构模式的开源框架,用于构建动态、数据驱动的Web应用程序,而FreeMarker则是一个模板引擎,它允许...
这两个技术的结合可以提供一种高效、灵活的方式来处理Web应用的展示逻辑。 在Struts2.0中,Freemarker作为视图技术,允许开发者将业务逻辑和显示逻辑分离。下面将详细讲解它们的集成过程以及相关知识点: 1. **...
通过这两个压缩包中的资源,开发者可以系统地学习Freemarker,并掌握如何在项目中运用这一技术,提高Web应用的效率和用户体验。同时,这份资料也能为解决实际问题提供思路和参考,对于提升个人或团队的技术能力...
在这个场景下,`jacob`和`FreeMarker`两个库可以发挥重要作用。`jacob`是一个Java到COM桥接库,允许Java程序调用COM组件,如Microsoft Office的应用程序。`FreeMarker`则是一个模板引擎,用于生成文本输出,常用于...
7. **`TemplateSequenceModel`** 和 **`TemplateCollectionModel`**:这两个接口分别代表可迭代的有序集合(如数组、列表)和无序集合(如Set)。它们提供了在模板中遍历集合元素的手段。 在使用FreeMarker时,通常...
4. `TemplateDirectiveModel`和`TemplateMethodModel`:这两个接口用于自定义模板指令和方法,使得在模板中可以调用Java方法或执行自定义逻辑。 5. `TemplateScalarModel`、`TemplateNumberModel`、`...