基于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开发自己的模板引擎的更多相关文章
- Spring Boot Web开发与thymeleaf模板引擎
简介: 使用Springboot应用,选中需要的模块, Spring已经默认将场景配置好了,只需在配置文件中少量配置就可以运行起来 自己编写业务代码 自动配置原理 这个场景Springboot帮我们配 ...
- Nunjucks:Mozilla 开发的 JavaScript 模板引擎
Nunjucks 中文网站:https://nunjucks.bootcss.com/
- Spring Boot Web开发中Thymeleaf模板引擎的使用
这里使用的是idea 1.新建Spring Boot项目 File-->New-->Project...,然后选择左边的Spring Initializr-->Next,可根据自己的 ...
- php模板引擎
http://baike.baidu.com/link?url=HmXfdJBv3zpCdnZPeaSmZmqDBHlyTBnz9Rmb5it-jf1_NLHfaku6_i8ssUYbnaTQEBD4 ...
- 一些基于jQuery开发的控件
基于jQuery开发,非常简单的水平方向折叠控件.主页:http://letmehaveblog.blogspot.com/2007/10/haccordion-simple-horizontal-a ...
- PHP模板引擎,Smarty定义
PHP模板引擎:PHP是一种HTML内嵌式的在服务器端执行的脚本语言.初始的开发模板就是混合 层的数据编程,虽然通过MVC的设计模式可以实现将程序的应用逻辑与网页的呈现逻辑强制 分离,但也只是将程序的 ...
- jquery的一个模板引擎-zt
jQuery-jTemplate.js下载:http://jtemplates.tpython.com/ 一 , 简单介绍 它是一个基于jQuery开发的javascript模板引擎.它主要的作用如下 ...
- Spring Boot 系列(五)web开发-Thymeleaf、FreeMarker模板引擎
前面几篇介绍了返回json数据提供良好的RESTful api,下面我们介绍如何把处理完的数据渲染到页面上. Spring Boot 使用模板引擎 Spring Boot 推荐使用Thymeleaf. ...
- JS模板引擎:基于字符串拼接
目的 编写一个基于字符串拼接的js模板引擎雏形,这里并不会提供任何模板与数据的绑定. 基本原理 Javascript中创建函数的方式有多种,包括: 1. var func = function () ...
随机推荐
- Python批量删除指定目录下的指定类型的文件
Python作为一种脚本语言.其很适合文件级的各种操作.以下的代码能够批量删除指定目录下的所有特定类型(CSV类型)的文件. import sys, csv , operator import os ...
- c语言数组应用--统计随机数并打印直方图
C标准库中生成伪随机数的是rand函数,使用这个函数需要包含头文件stdlib.h,它没有参数,返回值是一个介于0和RAND_MAX之间的接近均匀分布的整数.RAND_MAX是该头文件中定义的一个常量 ...
- 使用国内源解决Qt在线更新慢的问题
Qt在线安装更新工具默认使用官方的源,国内访问比较慢,可以在setting中增加国内的源来提高更新速度,如下面的源: http://mirrors.ustc.edu.cn/qtproject/onli ...
- projecteuler---->problem=9----Special Pythagorean triplet
title: A Pythagorean triplet is a set of three natural numbers, a b c, for which, a2 + b2 = c2 For e ...
- Java中的工具类和新特性
1:Collections集合框架工具类: /* 集合框架的工具类. Collections:集合框架的工具类.里面定义的都是静态方法. Collections和Collection有什么差别? Co ...
- JavaScript 中创建对象的方法(读书笔记思维导图)
面向对象(Object-Oriented, OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.而 ECMAScript 中没有类的概念,所以我们可以使用 ...
- hdu4185+poj3020(最大匹配+最小边覆盖)
传送门:hdu4185 Oil Skimming 题意:n*n的方格里有字符*和#,只能在字符#上放1*2的板子且不能相交,求最多能放多少个. 分析:直接给#字符编号,然后相邻的可以匹配,建边后无向图 ...
- extern int *a与extern int a[]
extern int *a与int a[] Table of Contents 1. 问题: 2. 解答: 1 问题: 以下的声明取自某个源文件: int a[10]; int *b=a; 但在还有一 ...
- PHP实现插入排序算法
插入排序(Insertion Sort),是一种较稳定.简单直观的排序算法.插入排序的工作原理,是通过构建有序序列,对于未排序的数据,在有序序列中从后向前扫描,找到合适的位置并将其插入.插入排序,在最 ...
- 使用windows-SQLyog连接linux-mysql
嘿嘿,最近又清闲了一点,重新安装了mysql去学习. -----博客园-邦邦酱好 系统环境: 1. 主机为windows系统,安装了SQLyog. 2. 主机上还安装了虚拟机,系统为c ...