本篇文章为原创,转载请说明出处
下面是我写的关于模板引擎的列子,希望对大家有所帮助
首先看下目录结构:
所需要的jar包:
第一步:编写接口TemplateEngine.java
package templatetest.templateInterface;
import java.util.Map;
public interface TemplateEngine {
void run(Map context) throws Exception;
}
第二步:编写工具类Constants.java
package templatetest.util;
public class Constants {
public static final String ENGINE_TYPE_VELOCITY = "volecity";
public static final String ENGINE_TYPE_FREEMARKER = "freemarker";
}
第三步:编写抽象类AbstractTemplateEngine.java
package templatetest.templateImpl;
import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Map;
import java.util.Properties;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import templatetest.templateInterface.TemplateEngine;
import templatetest.util.Constants;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
public abstract class AbstractTemplateEngine implements TemplateEngine{
public abstract String getTemplatePath();
public abstract String getTemplate();
public abstract String getEngineType();
public void run(Map context) throws Exception {
if(Constants.ENGINE_TYPE_FREEMARKER.equals(getEngineType())){
executeFreemarker(context);
}else{
executeVelocity(context);
}
}
private void executeFreemarker(Map context) throws Exception {
Configuration cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(new File(getTemplatePath()));
cfg.setObjectWrapper(new DefaultObjectWrapper());
cfg.setCacheStorage(new freemarker.cache.MruCacheStorage(20, 250));
Template template = cfg.getTemplate(getTemplate());
Writer write = new OutputStreamWriter(System.out);
template.process(context, write);
write.flush();
}
private void executeVelocity(Map context) throws Exception {
Properties p = new Properties();
p.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, getTemplatePath());
Velocity.init(p);
VelocityContext velocityContext = new VelocityContext(context);
org.apache.velocity.Template template = null;
template = Velocity.getTemplate(getTemplate());
StringWriter sw = new StringWriter();
template.merge(velocityContext, sw);
System.out.println(sw.toString());
}
}
第四步:分别编写FreemarkerTemplateEngine.java和VelocityTemplateEngine.java
package templatetest.templateImpl;
import java.util.Map;
import templatetest.util.Constants;
public class FreemarkerTemplateEngine extends AbstractTemplateEngine {
public static String DEFAULT_TEMPLATE = "FreemarkerExample1.ftl";
@Override
public String getEngineType() {
return Constants.ENGINE_TYPE_FREEMARKER;
}
@Override
public String getTemplate() {
return DEFAULT_TEMPLATE;
}
@Override
public String getTemplatePath() {
return null;
}
public void run(Map context) throws Exception{
super.run(context);
}
}
package templatetest.templateImpl;
import java.util.Map;
import templatetest.util.Constants;
public class VelocityTemplateEngine extends AbstractTemplateEngine {
public static String DEFAULT_TEMPLATE ="VelocityExample1.vm";
@Override
public String getEngineType() {
return Constants.ENGINE_TYPE_VELOCITY;
}
@Override
public String getTemplate() {
return DEFAULT_TEMPLATE;
}
@Override
public String getTemplatePath() {
return null;
}
public void run(Map context) throws Exception{
super.run(context);
}
}
第五步:编写工厂类TemplateFactory.java
package templatetest.factory;
import java.util.HashMap;
import java.util.Map;
import javax.jms.ObjectMessage;
import templatetest.templateImpl.FreemarkerTemplateEngine;
import templatetest.templateImpl.VelocityTemplateEngine;
public class TemplateFactory {
private static TemplateFactory instance;
private static Map objectMap;
static{
instance = new TemplateFactory();
}
public TemplateFactory(){
super();
this.objectMap = new HashMap();
synchronized(this){
objectMap.put("freemarker", new FreemarkerTemplateEngine(){
public String getTemplatePath(){
return "D:/tomcat6/webapps/jc6/templatetest/";
}
});
objectMap.put("velocity", new VelocityTemplateEngine(){
public String getTemplatePath(){
return "D:/tomcat6/webapps/jc6/templatetest/";
}
});
}
}
public static TemplateFactory getInstance(){
return instance;
}
public static Object getBean(String key){
return objectMap.get(key);
}
}
第六步:编写模板
freemarker template test:
string test: ${user}---${map.url}----${map.name}
Long test:${age}
condition test:
<#if user == 'longzhun'>
list test:
<#list numberList as aa>
${aa}
</#list>
</#if>
date test:${date?string("yyyy-MM-dd")}
date test:${date?string("MMM/dd/yyyy")}
date test:${date?string("")}2011-5-232011-5-23
velocity template test:
string test: ${user}---${map.url}----${map.name}
Long test:${age}
condition test:
#if($user == "longzhun")
list test:
#foreach($aa in $numberList)
$aa
#end
#end
date test:${date}
第七步:准备数据,测试
package templatetest.test;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import templatetest.factory.TemplateFactory;
import templatetest.templateInterface.TemplateEngine;
public class TemplateTest {
public static void main(String[] args) throws Exception {
//准备数据
Map map = new HashMap();
map.put("url", "yesc.com.cn");
map.put("name", "管理员");
List list = new ArrayList();
list.add("1");
list.add("2");
Map context = new HashMap();
context.put("user", "longzhun");
context.put("age", new Long(25000));
context.put("date", new Date());
context.put("numberList", list);
context.put("map", map);
TemplateEngine freemarkerEngine = (TemplateEngine) TemplateFactory.getInstance().getBean("freemarker");
freemarkerEngine.run(context);
TemplateEngine volecityEngine = (TemplateEngine) TemplateFactory.getInstance().getBean("velocity");
volecityEngine.run(context);
}
}
最后奉上文档:
- 大小: 22 KB
- 大小: 14.6 KB
分享到:
相关推荐
### jsp、freemarker、velocity简介和对比 在Java Web开发领域,模板引擎是连接后端业务逻辑与前端展示层的重要桥梁。本文将重点介绍三种常用的Java Web模板引擎:JSP(Java Server Pages)、Freemarker以及...
在 WebWork2 中,我们可以随意选择使用 Freemarker 或 Velocity 作为 View,模板技术作为 View 的好处是很多,尤其和 JSP 比较起来优点更大。 Velocity 和 Freemarker 都是开源的模板技术,它们都提供了强大的功能...
标题“velocity和freemarker的比较”涉及到的是两个在Java Web开发中常用的模板引擎——Velocity和FreeMarker。它们都是用于将静态模板与动态数据结合,生成HTML或其他类型的文本输出,常用于MVC(模型-视图-控制器...
**FreeMarker**相比**Velocity**而言,在大多数情况下更加容易使用。主要原因是FreeMarker内置了更多的功能,例如自动转义机制、丰富的内置函数等,这使得开发者无需额外编写工具类或方法即可完成许多常见的任务。而...
Freemarker和Velocity是两种广泛使用的模板引擎,它们在Java Web开发中扮演着重要的角色,主要用于生成动态HTML页面。Eclipse作为流行的Java集成开发环境,为开发者提供了丰富的插件支持,包括对这两种模板引擎的...
标题 "大型商城网站springmvc+freemarker+velocity+ibatis" 暗示了这是一个基于SpringMVC、Freemarker、Velocity和iBatis框架构建的电子商务平台。这个项目可能是一个B2C(Business-to-Consumer)类型的商城,允许...
Struts2集成FreeMarker和Velocity,写成了工具类,快速实现页面静态化,以后直接调用即可,无需修改任何源代码,改压缩文件包括 1、工具类; 2、源码(含jar包); 3、mysql数据库可执行文件; 4、struts2集成...
这是一个基于Java技术栈的应用实例,整合了多个关键的开源框架,包括Maven、SpringMVC、MyBatis、FreeMarker和Velocity。这些技术在IT行业中广泛应用于开发企业级Web应用程序,构建高效、灵活且可维护的系统。接下来...
本篇文章将对四个流行的Java模板引擎——Velocity、FreeMarker、Smarty4j以及HTTL进行效率分析,旨在探讨它们在处理业务逻辑编译和性能方面的优劣。 1. Velocity: Velocity是Apache软件基金会的一个开源项目,以其...
在实际应用中,由于Velocity需要自定义toolbox类和编写通用模板代码,而Freemarker则相对更易于使用。 Freemarker的工作原理可概括为:将页面样式设计放在FreeMarker模板文件中,然后将动态数据以键值对的形式放入...
FreeMarker与其他工具如Velocity、Thymeleaf等相比,具有灵活性高、性能优秀、易于学习等特点。它的强大之处在于支持复杂的逻辑表达式和自定义指令,使得模板编写更加灵活。在实际项目中,可以利用FreeMarker生成DAO...
Velocity是一个开源的Java模板引擎,它允许开发者将HTML与Java代码分离,使Web开发者...对于新项目,考虑使用更新的版本(如Velocity 2.x)或者其他的模板引擎,如FreeMarker或Thymeleaf,可能会带来更多的优势和功能。
- Nutz的MVC模式中,视图层支持多种模板引擎,包括JSP、Velocity、Freemarker等。 2. **Freemarker**: - Freemarker是一个模板语言,它与Java代码分离,使得开发者可以专注于页面布局和设计,而无需关心业务逻辑...
FreeMarker是一个开源的模板引擎,主要用于生成HTML Web页面,尤其适用于MVC模式的应用程序。...尽管Velocity等其他工具也有其优点,但FreeMarker的广泛特性和强大功能使其在许多场景下成为更优选择。
此外,Struts2支持多种视图技术,包括JSP、FreeMarker、Velocity等。 **FreeMarker模板引擎** FreeMarker是一个基于模板的语言,它与Java代码分离,使得开发者可以专注于页面的布局和设计,而不必关心业务逻辑。...
下面将详细介绍Freemarker的核心概念、配置、语法以及常见使用场景。 **1. Freemarker核心概念** - **模板(Templates)**:Freemarker的核心是模板文件,它定义了页面的布局和样式,包含变量和控制结构。 - **数据...
1. **语法简洁性**:Freemarker的语法可能更为简洁,如其使用`<#if>`、`<#foreach>`等,而Velocity则使用`#if`、`#foreach`。 2. **灵活性**:Velocity的宏功能相对强大,更易于复用和扩展,而Freemarker的模板继承...
Reference(FreeMarker 的参考文档,语言使用介绍) 中文翻译之所以选择 Programmer's Guide 是因为个人觉得该部分对如何实现 FreeMarker 进行了比较深入的阐述。有助于读者很好的了解其运作机制,以及去理解...