本篇文章为原创,转载请说明出处
下面是我写的关于模板引擎的列子,希望对大家有所帮助
首先看下目录结构:
所需要的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); } }
最后奉上文档: