基于Velocity开发自己的模板引擎
来源:互联网 发布:京东秒杀软件有用吗 编辑:程序博客网 时间:2024/04/30 06:19
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。
当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只 关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提 供了便利,同时也为我们在JSP,PHP和Freemarker之外又提供了一种可选的方案。
大多数开发人员只了解上述部分,即Velocity可以作为MVC的V,所以出现了很多Velocity和SpringMVC,Velocity和Struts集成的设计。但少有人关注,Velocity作为模板引擎的意义,既然是模板引擎,那它就不应该仅仅局限在MVC的领域。
Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当 作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。
以下代码,是我对Velocity的简单封装,可以将Velocity作为单独的组件来使用,稍加丰富就可以成为我们应用的模板引擎。
核心代码:package com.ths.platform.framework.template;import java.io.BufferedWriter;import java.io.FileOutputStream;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.util.Properties;import org.apache.velocity.Template;import org.apache.velocity.VelocityContext;import org.apache.velocity.app.Velocity;import org.apache.velocity.app.VelocityEngine;public class VelocityParser{ //模板上下文 private VelocityContext mainContext; //模板对象 private Template mainTemplate; //模板引擎 private VelocityEngine velocityEngine; //模板引擎初始化参数 private Properties properties; public static void main( String[ ] args ) { String filepath = "template/view.jsp"; VelocityParser velocityParser = new VelocityParser( filepath ); velocityParser.addToContext( "title" , "HelloWorld" ); velocityParser.processTemplate( ); } /** * @MethodName: addToContext * @Description: 向模板上下文中添加参数 * @param key * @param value */ public void addToContext( String key, Object value ) { if ( mainContext == null ) { mainContext = new VelocityContext( ); } mainContext.put( key , value ); } /** * @MethodName: addToContext * @Description:初始化模板上下文 * @param chainCtx */ public void addToContext( VelocityContext chainCtx ) { mainContext = new VelocityContext( chainCtx ); } /** * @MethodName: processTemplate * @Description: 输出到控制台 */ public void processTemplate() { try { BufferedWriter writer = new BufferedWriter( new OutputStreamWriter( System.out ) ); if ( mainTemplate != null ) { mainTemplate.merge( mainContext , writer ); } writer.flush( ); writer.close( ); } catch ( Exception ex ) { ex.printStackTrace( ); } } /** * @MethodName: processTemplate * @Description: 输出到文件 * @param destPath */ public void processTemplate(String destPath) { try { OutputStream os = new FileOutputStream(destPath); OutputStreamWriter writer = new OutputStreamWriter(os, "UTF-8"); if ( mainTemplate != null ) { mainTemplate.merge( mainContext , writer ); } writer.flush( ); writer.close( ); } catch ( Exception ex ) { ex.printStackTrace( ); } } /** * 根据模板文件初始化模板引擎 * @param templateFile */ public VelocityParser( String templateFile ) { this(templateFile , null); } /** * 根据模板文件和模板上下文(参数)初始化模板引擎 * @param templateFile * @param chainContext */ public VelocityParser( String templateFile , VelocityContext chainContext ) { try { //新建模板引擎 velocityEngine = new VelocityEngine( ); //获取初始化参数 properties = initProperties( ); //初始化模板引擎 velocityEngine.init( properties ); //获取模板对象 mainTemplate = velocityEngine.getTemplate( templateFile ); //设置模板上下文 if(chainContext!=null){ //设置模板上下文 mainContext = chainContext; } } catch ( Exception ex ) { System.out.println( "Error processing template file: " + templateFile ); } } /** * @MethodName: initProperties * @Description: 设置初始化参数 * @return */ private Properties initProperties() { Properties properties = new Properties( ); //设置从classpath中加载模板文件 properties.setProperty( Velocity.FILE_RESOURCE_LOADER_PATH , Thread.currentThread( ) .getContextClassLoader( ).getResource( "" ).getPath( ) ); //解决模板中文乱码 properties.setProperty( Velocity.INPUT_ENCODING , "utf-8" ); properties.setProperty( Velocity.OUTPUT_ENCODING , "utf-8" ); return properties; }}
模板:
<table> <tr><td>$title</td></tr> </table>
执行main方法,即可在控制台输出模板和参数合并后生成的数据。
有了这段代码,只要开发过程中,再涉及到重复劳动,再涉及到输出什么报告,只要你能抽取出模板,其他工作,就让它滚犊子去吧。
9 2
- 基于Velocity开发自己的模板引擎
- 基于java的模板引擎Velocity
- 基于java的Velocity模板匹配引擎
- 开发自己的模板引擎
- 一种基于java语言的模板引擎velocity的使用
- 一个基于velocity模板引擎的代码生成器
- Velocity 是一个基于 Java 的模板引擎
- Velocity是一个基于java的模板引擎
- Velocity基于java的模板引擎(template engine)
- 一个基于 Java 的模板引擎框架Velocity学习总结
- 如何使用 velocity 模板引擎开发网站
- 如何使用 velocity 模板引擎开发网站
- 使用Velocity 模板引擎开发网站
- 如何使用 velocity 模板引擎开发网站
- Java的模板引擎Velocity初体验
- Velocity模板引擎的缓冲机制
- Velocity模板引擎的简单使用
- Velocity模板引擎的简单使用
- 用gcc去编译c程序
- iOS block的用法
- 无语的index hint:手工分配哈希区,5小时不出结果,优化后20分钟
- linux下minicom的使用方法
- 第九周项目四乘法口诀表
- 基于Velocity开发自己的模板引擎
- android应用跳转至市场给软件评分功能
- Cookie大总结(来自网易)
- Ubuntu 10.04 开启 framebuffer
- iOS开发基础知识
- UVA - 348 Optimal Array Multiplication Sequence
- 【智商都是硬伤】分析与逻辑思考能力测试
- HDU 4751 BFS
- java基础总结01