`
longzhun
  • 浏览: 364441 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

freemarker&velocity的使用

阅读更多


本篇文章为原创,转载请说明出处

 下面是我写的关于模板引擎的列子,希望对大家有所帮助

首先看下目录结构:



 所需要的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
分享到:
评论

相关推荐

    模板:velocity和freemarker的比较

    在 WebWork2 中,我们可以随意选择使用 Freemarker 或 Velocity 作为 View,模板技术作为 View 的好处是很多,尤其和 JSP 比较起来优点更大。 Velocity 和 Freemarker 都是开源的模板技术,它们都提供了强大的功能...

    Velocity 和 FreeMarker区别

    Velocity 和 FreeMarker区别 对于大部分的应用来说,使用 FreeMarker 比 Velocity 更简单,因为 Velocity 还必须编写一些自定义的

    jsp、freemarker、velocity简介和对比

    jsp、freemarker、velocity简介和对比。---如果你已经开发Java Web应用程序一段时间,那么对于 JVM 的 PermGen 问题可能并不陌生。由于 FreeMarker 模板不编译成类,它们不占用 PermGen 空间,并不需要一个新的类...

    Freemarker和Velocity的eclipse插件

    Freemarker和Velocity是两种广泛使用的模板引擎,它们在Java Web开发中扮演着重要的角色,主要用于生成动态HTML页面。Eclipse作为流行的Java集成开发环境,为开发者提供了丰富的插件支持,包括对这两种模板引擎的...

    大型商城网站springmvc+freemarker+velocity+ibatis

    标题 "大型商城网站springmvc+freemarker+velocity+ibatis" 暗示了这是一个基于SpringMVC、Freemarker、Velocity和iBatis框架构建的电子商务平台。这个项目可能是一个B2C(Business-to-Consumer)类型的商城,允许...

    velocity和freemarker的比较

    标题“velocity和freemarker的比较”涉及到的是两个在Java Web开发中常用的模板引擎——Velocity和FreeMarker。它们都是用于将静态模板与动态数据结合,生成HTML或其他类型的文本输出,常用于MVC(模型-视图-控制器...

    Struts2集成FreeMarker和Velocity,写成了工具类,快速实现页面静态化

    Struts2集成FreeMarker和Velocity,写成了工具类,快速实现页面静态化,以后直接调用即可,无需修改任何源代码,改压缩文件包括 1、工具类; 2、源码(含jar包); 3、mysql数据库可执行文件; 4、struts2集成...

    应用实例,可运行maven+springmvc+mybaits+freemarker+velocity

    这是一个基于Java技术栈的应用实例,整合了多个关键的开源框架,包括Maven、SpringMVC、MyBatis、FreeMarker和Velocity。这些技术在IT行业中广泛应用于开发企业级Web应用程序,构建高效、灵活且可维护的系统。接下来...

    当前流行的模板引擎效率分析(velocity,freeMarker,Smarty4j,httl)

    本篇文章将对四个流行的Java模板引擎——Velocity、FreeMarker、Smarty4j以及HTTL进行效率分析,旨在探讨它们在处理业务逻辑编译和性能方面的优劣。 1. Velocity: Velocity是Apache软件基金会的一个开源项目,以其...

    Freemarker使用指南

    在实际应用中,由于Velocity需要自定义toolbox类和编写通用模板代码,而Freemarker则相对更易于使用。 Freemarker的工作原理可概括为:将页面样式设计放在FreeMarker模板文件中,然后将动态数据以键值对的形式放入...

    使用FreeMarker生成java代码

    FreeMarker与其他工具如Velocity、Thymeleaf等相比,具有灵活性高、性能优秀、易于学习等特点。它的强大之处在于支持复杂的逻辑表达式和自定义指令,使得模板编写更加灵活。在实际项目中,可以利用FreeMarker生成DAO...

    nutz的freemarker视图插件

    - Nutz的MVC模式中,视图层支持多种模板引擎,包括JSP、Velocity、Freemarker等。 2. **Freemarker**: - Freemarker是一个模板语言,它与Java代码分离,使得开发者可以专注于页面布局和设计,而无需关心业务逻辑...

    Struts2+FreeMarker部署

    此外,Struts2支持多种视图技术,包括JSP、FreeMarker、Velocity等。 **FreeMarker模板引擎** FreeMarker是一个基于模板的语言,它与Java代码分离,使得开发者可以专注于页面的布局和设计,而不必关心业务逻辑。...

    Freemarker 实例,Freemarker 实例

    下面将详细介绍Freemarker的核心概念、配置、语法以及常见使用场景。 **1. Freemarker核心概念** - **模板(Templates)**:Freemarker的核心是模板文件,它定义了页面的布局和样式,包含变量和控制结构。 - **数据...

    velocity document

    1. **语法简洁性**:Freemarker的语法可能更为简洁,如其使用`&lt;#if&gt;`、`&lt;#foreach&gt;`等,而Velocity则使用`#if`、`#foreach`。 2. **灵活性**:Velocity的宏功能相对强大,更易于复用和扩展,而Freemarker的模板继承...

    Freemarker使用手册、api、中文版教程

     Reference(FreeMarker 的参考文档,语言使用介绍) 中文翻译之所以选择 Programmer's Guide 是因为个人觉得该部分对如何实现 FreeMarker 进行了比较深入的阐述。有助于读者很好的了解其运作机制,以及去理解...

    spring mvc与velocity整合

    它支持多种视图技术,如JSP、FreeMarker、Velocity等。 **2. Velocity 概述** Velocity是一个基于Java的模板引擎,它的主要目标是提供一个简洁、高效的模板语言,使开发者可以专注于页面布局和设计,而不用关心底层...

    Velocity用户手册(中文)

    4. **Freemarker**: 虽然Velocity和Freemarker都是模板引擎,但它们各有特点,可以根据项目需求选择合适的工具。 总之,Velocity作为一款强大的模板引擎,对于Web开发中的前后端分离有着重要作用,它的简单性和灵活...

Global site tag (gtag.js) - Google Analytics