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方法,就可以在控制台输出模板和參数合并后生成的数据。
有了这段代码,仅仅要开发过程中,再涉及到反复劳动,再涉及到输出什么报告,仅仅要你能抽取出模板,其它工作,就让它滚犊子去吧。

基于Velocity开发自己的模板引擎相关推荐

  1. 基于jQuery开发的javascript模板引擎-jTemplates

    这里介绍一个基于jQuery开发的模板引擎. jTemplates目前最新的版本是0.7.8,由tPython开发.官方网站:http://jtemplates.tpython.com 两个附件,一个 ...

  2. 【JAVA企业级开发】浅谈关于在WEB大前端已然降临的时代中,你是否还是在学习jsp、freemarker、velocity、themleaf等模板引擎么?

    这里写目录标题 一级目录 二级目录 三级目录 一在java领域,表现层技术主要有四种:`jsp.freemarker.velocity,themleaf` 1jsp是大家最熟悉的技术 2velocit ...

  3. Velocity语法介绍(模板引擎)

    什么是Velocity? Velocity是一个基于Java的模板引擎.它允许任何人使用简单但功能强大的模板语言来引用Java代码中定义的对象. 当Velocity用于Web开发时,Web设计人员可以 ...

  4. velocity(vm)模板引擎学习介绍及语法

    velocity模板引擎学习 velocity与freemaker.jstl并称为java web开发三大标签技术,而且velocity在codeplex上还有.net的移植版本NVelocity,( ...

  5. php开发自己的模板引擎,如何用PHP来编写自己的模板引擎 - PHP|模板引擎 - 软件工程|架构设计|网站设计|艺术营销 - 河洛炎黄 - 魏文侯...

    本文的目的不是为了让大家学会如何编写一个完善的模板引擎,只是为了给PHP初学入门者解释模板引擎的原理和作用. PHP模板引擎的作用是为了让表现层逻辑和页面本身分开,让程序员和美工的工作可以相对独立,并 ...

  6. MyBatis Plus Generator——基于Velocity的Controller参考模板(集成MyBatis Plus、Swagger2、自封装Response、分页)

    代码生成器 MyBatis Plus Generator--MyBatis Plus代码生成器DEMO 解决方案 包含:MyBatis Plus.Swagger2.自封装Response.MyBati ...

  7. [转]jquery的一个模板引擎-zt

    jQuery-jTemplate.js下载:http://jtemplates.tpython.com/  一 , 简单介绍 它是一个基于jQuery开发的javascript模板引擎.它主要的作用如 ...

  8. Spring Boot 系列(五)web开发-Thymeleaf、FreeMarker模板引擎

    前面几篇介绍了返回json数据提供良好的RESTful api,下面我们介绍如何把处理完的数据渲染到页面上. Spring Boot 使用模板引擎 Spring Boot 推荐使用Thymeleaf. ...

  9. 由浅入深:自己动手开发模板引擎——置换型模板引擎(一)

    受到群里兄弟们的竭力邀请,老陈终于决定来分享一下.NET下的模板引擎开发技术.本系列文章将会带您由浅入深的全面认识模板引擎的概念.设计.分析和实战应用,一步一步的带您开发出完全属于自己的模板引擎.关于 ...

  10. SpringBoot (三) :SpringBoot使用Freemarker模板引擎渲染web视图

    什么是Freemarker FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而 ...

最新文章

  1. 苹果宣布创立欧洲首个iOS开发中心
  2. pytorch用win还是Linux,如何在Windows系统安装使用机器学习库PyTorch
  3. 【学习笔记】juc并发学习+关于锁的面试题
  4. Postman界面了解
  5. 双双拿下赛道全部指标最佳 | 腾讯新一代VAV1携手V265亮相MSU编码器大赛
  6. storm-kafka编程指南
  7. sublime快捷键代码对齐_Python配置sublime运行环境
  8. mysql函数使用场景_mysql的函数和存储过程的比较,以及在实际场景中的使用案例...
  9. c语言深度解剖 pdf,c语言深度解剖(解密).pdf.pdf
  10. 【计算机网络】信息与信号
  11. jar包在linux定时调度,xshell脚本启动JAR包-定时任务拆分日志
  12. PyQt5-QComboBox控件使用实现省市级联效果
  13. Html5+JavaScript经典塔防游戏runner源
  14. 午夜分享女人的绝对隐私
  15. 辣侃情恋男女的犀利段子
  16. Node.js 实现登录校验 + 选项卡(改进版)
  17. 笔记三、最大数字(C++)
  18. Java类加载与初始化机制实例分析
  19. 海思对接索尼ECX334 RGB OLED屏总结
  20. 如何设置EXCEL里标题在每页都打印?

热门文章

  1. java visualvm 内存泄露_如何使用VisualVM检测Java内存泄漏
  2. java 注解处理器的作用_JVM进阶 -- 浅谈注解处理器
  3. 鼠标悬停显示不同内容_数字标牌的A到Z:C代表CMS(内容管理系统)
  4. error: 'Can't connect to local MySQL server through socket '/data/3307/data/mysql.sock' (2)'
  5. 【互动出版网】央视热播BBC纪录片同名图书买二赠一活动
  6. 伸缩Kubernetes到2500个节点中遇到的问题和解决方法
  7. eclipse内存设置参数
  8. 【C语言入门教程】4.7 指针的地址分配 - mallocl(), free()
  9. [转]【基于zxing的编解码实战】精简Barcode Scanner篇
  10. 3、Keras中的顺序模型Sequential和函数式模型Model