基于Velocity开发自己的模板引擎
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>
基于Velocity开发自己的模板引擎相关推荐
- 基于jQuery开发的javascript模板引擎-jTemplates
这里介绍一个基于jQuery开发的模板引擎. jTemplates目前最新的版本是0.7.8,由tPython开发.官方网站:http://jtemplates.tpython.com 两个附件,一个 ...
- 【JAVA企业级开发】浅谈关于在WEB大前端已然降临的时代中,你是否还是在学习jsp、freemarker、velocity、themleaf等模板引擎么?
这里写目录标题 一级目录 二级目录 三级目录 一在java领域,表现层技术主要有四种:`jsp.freemarker.velocity,themleaf` 1jsp是大家最熟悉的技术 2velocit ...
- Velocity语法介绍(模板引擎)
什么是Velocity? Velocity是一个基于Java的模板引擎.它允许任何人使用简单但功能强大的模板语言来引用Java代码中定义的对象. 当Velocity用于Web开发时,Web设计人员可以 ...
- velocity(vm)模板引擎学习介绍及语法
velocity模板引擎学习 velocity与freemaker.jstl并称为java web开发三大标签技术,而且velocity在codeplex上还有.net的移植版本NVelocity,( ...
- php开发自己的模板引擎,如何用PHP来编写自己的模板引擎 - PHP|模板引擎 - 软件工程|架构设计|网站设计|艺术营销 - 河洛炎黄 - 魏文侯...
本文的目的不是为了让大家学会如何编写一个完善的模板引擎,只是为了给PHP初学入门者解释模板引擎的原理和作用. PHP模板引擎的作用是为了让表现层逻辑和页面本身分开,让程序员和美工的工作可以相对独立,并 ...
- MyBatis Plus Generator——基于Velocity的Controller参考模板(集成MyBatis Plus、Swagger2、自封装Response、分页)
代码生成器 MyBatis Plus Generator--MyBatis Plus代码生成器DEMO 解决方案 包含:MyBatis Plus.Swagger2.自封装Response.MyBati ...
- [转]jquery的一个模板引擎-zt
jQuery-jTemplate.js下载:http://jtemplates.tpython.com/ 一 , 简单介绍 它是一个基于jQuery开发的javascript模板引擎.它主要的作用如 ...
- Spring Boot 系列(五)web开发-Thymeleaf、FreeMarker模板引擎
前面几篇介绍了返回json数据提供良好的RESTful api,下面我们介绍如何把处理完的数据渲染到页面上. Spring Boot 使用模板引擎 Spring Boot 推荐使用Thymeleaf. ...
- 由浅入深:自己动手开发模板引擎——置换型模板引擎(一)
受到群里兄弟们的竭力邀请,老陈终于决定来分享一下.NET下的模板引擎开发技术.本系列文章将会带您由浅入深的全面认识模板引擎的概念.设计.分析和实战应用,一步一步的带您开发出完全属于自己的模板引擎.关于 ...
- SpringBoot (三) :SpringBoot使用Freemarker模板引擎渲染web视图
什么是Freemarker FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而 ...
最新文章
- 苹果宣布创立欧洲首个iOS开发中心
- pytorch用win还是Linux,如何在Windows系统安装使用机器学习库PyTorch
- 【学习笔记】juc并发学习+关于锁的面试题
- Postman界面了解
- 双双拿下赛道全部指标最佳 | 腾讯新一代VAV1携手V265亮相MSU编码器大赛
- storm-kafka编程指南
- sublime快捷键代码对齐_Python配置sublime运行环境
- mysql函数使用场景_mysql的函数和存储过程的比较,以及在实际场景中的使用案例...
- c语言深度解剖 pdf,c语言深度解剖(解密).pdf.pdf
- 【计算机网络】信息与信号
- jar包在linux定时调度,xshell脚本启动JAR包-定时任务拆分日志
- PyQt5-QComboBox控件使用实现省市级联效果
- Html5+JavaScript经典塔防游戏runner源
- 午夜分享女人的绝对隐私
- 辣侃情恋男女的犀利段子
- Node.js 实现登录校验 + 选项卡(改进版)
- 笔记三、最大数字(C++)
- Java类加载与初始化机制实例分析
- 海思对接索尼ECX334 RGB OLED屏总结
- 如何设置EXCEL里标题在每页都打印?
热门文章
- java visualvm 内存泄露_如何使用VisualVM检测Java内存泄漏
- java 注解处理器的作用_JVM进阶 -- 浅谈注解处理器
- 鼠标悬停显示不同内容_数字标牌的A到Z:C代表CMS(内容管理系统)
- error: 'Can't connect to local MySQL server through socket '/data/3307/data/mysql.sock' (2)'
- 【互动出版网】央视热播BBC纪录片同名图书买二赠一活动
- 伸缩Kubernetes到2500个节点中遇到的问题和解决方法
- eclipse内存设置参数
- 【C语言入门教程】4.7 指针的地址分配 - mallocl(), free()
- [转]【基于zxing的编解码实战】精简Barcode Scanner篇
- 3、Keras中的顺序模型Sequential和函数式模型Model