Velocity快速入门
Velocity 介绍
Velocity是一个基于java的模板引擎。它允许任何人使用简单但功能强大的模板语言引用Java代码中定义的对象。
当Velocity用于web开发时,web设计人员可以与Java程序员并行工作,根据模型-视图-控制器(MVC)模型开发web站点,这意味着web页面设计人员可以只专注于创建看起来不错的站点,而程序员可以只专注于编写一流的代码。Velocity将Java代码从web页面中分离出来,使web站点在其生命周期内更具可维护性,并为Java服务器页面(jsp)或PHP提供了一个可行的替代方案。
Velocity的功能远远超出了web的范围;例如,它可以用来从模板生成SQL、PostScript和XML。它既可以作为生成源代码和报告的独立实用程序使用,也可以作为其他系统的集成组件使用。例如,Velocity为各种web框架提供模板服务,使它们能够使用视图引擎,以便根据真正的MVC模型开发web应用程序。
Velocity 主要使用场景
- Web 应用:开发者在不使用 JSP 的情况下,可以用 Velocity 让 HTML 具有动态内容的特性。
- 源代码生成:Velocity 可以被用来生成 Java 代码、SQL 或者 PostScript。
- 自动 Email:很多软件的用户注册、密码提醒或者报表都是使用 Velocity 来自动生成的。
- 转换 xml。
VTL语法使用
在 Velocity 中所有的关键字都是以#开头的,而所有的变量则是以$开头。Velocity 的语法类似于 JSP 中的 JSTL,甚至可以定义类似于函数的宏,下面来看看具体的语法规则。
一、变量
和我们所熟知的其他编程语言一样,Velocity 也可以在模板文件中有变量的概念。
变量定义
#set($name =“velocity”)
等号后面的字符串 Velocity 引擎将重新解析,例如出现以$开始的字符串时,将做变量的替换。
#set($hello =“hello $name”)
上面的这个等式将会给 $hello 赋值为“hello velocity”
变量的使用
在模板文件中使用$name 或者 ${name} 来使用定义的变量。推荐使用 \({name} 这种格式,因为在模板中同时可能定义了类似\)name 和 $names 的两个变量,如果不选用大括号的话,引擎就没有办法正确识别 $names 这个变量。
#set($name =“ricky”)
Welcome $name to velocity\.com
二、循环
在 Velocity 中循环语句的语法结构如下:
#foreach($element in $list)
This is $element
$velocityCount
#end
Velocity 引擎会将 list 中的值循环赋给 element 变量,同时会创建一个 $velocityCount 的变量作为计数,从 1 开始,每次循环都会加 1
三、条件语句
条件语句的语法如下:
#if(condition)
#elseif(condition)
#else
#end
四、关系操作符
Velocity 引擎提供了 AND、OR 和 NOT 操作符,分别对应&&、||和! 例如:
#if($foo && $bar)
#end
五、宏
Velocity 中的宏可以理解为函数定义。定义的语法如下:
#macro(macroName arg1 arg2 …)
#end
调用这个宏的语法是:
#macroName(arg1 arg2 …)
这里的参数之间使用空格隔开,下面是定义和使用 Velocity 宏的例子:
#macro(sayHello $name)
hello $name
#end
#sayHello(“velocity”)
输出的结果为 hello velocity
六、#parse 和 #include
#parse 和 #include 指令的功能都是在外部引用文件,而两者的区别是:#parse 会将引用的内容当成类似于源码文件,会将内容在引入的地方进行解析,#include 是将引入文件当成资源文件,会将引入内容原封不动地以文本输出。分别看以下例子:
foo.vm 文件:
#set($name =“velocity”)
parse.vm:
#parse(“foo.vm”)
输出结果为:velocity
include.vm:
#include(“foo.vm”)
输出结果为:#set($name =“velocity”)
API实战
- Singleton Model
使用 org.apache.velocity.app.Velocity类
package com.bytebeats.velocity.sample;
import java.io.StringWriter;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.Template;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.MethodInvocationException;
public class SingletonModelDemo {
public static void main(String[] args) {
Velocity.init();
VelocityContext context = new VelocityContext();
context.put("name", "Velocity");
Template template = null;
try {
template = Velocity.getTemplate("mytemplate.vm");
} catch( ResourceNotFoundException e ) {
// couldn't find the template
} catch( ParseErrorException pee ) {
// syntax error: problem parsing the template
} catch( MethodInvocationException mie ) {
// something invoked in the template
// threw an exception
} catch( Exception e ) {
}
StringWriter sw = new StringWriter();
template.merge(context, sw);
System.out.println("content:"+sw.toString());
}
}
- Separate Instance
使用org.apache.velocity.app.VelocityEngine,如下:
package com.bytebeats.velocity.sample;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import java.io.StringWriter;
public class SeparateInstanceDemo {
public static void main(String[] args) {
//1. create a new instance of the engine
VelocityEngine ve = new VelocityEngine();
//2. configure the engine
ve.setProperty(VelocityEngine.RESOURCE_LOADER, "classpath");
//3. initialize the engine
ve.init();
VelocityContext context = new VelocityContext();
context.put("name", "Velocity");
Template template = ve.getTemplate("foo.vm");
StringWriter sw = new StringWriter();
template.merge(context, sw);
System.out.println("content:"+sw.toString());
}
}
还有另外一种方式来配置:
Properties props = new Properties();
props.load(this.getClass().getResourceAsStream("/vm.properties"));
VelocityEngine ve = new VelocityEngine(props);
ve.init();
官方文档:http://velocity.apache.org/
Velocity快速入门的更多相关文章
- Velocity快速入门教程-脚本语法详解(转)
1.变量 (1)变量的定义: #set($name = "hello") 说明:velocity中变量是弱类型的. 当使用#set 指令时,括在双引号中的字面字符串将解析 ...
- velocity 快速入门
基本语法 1.变量定义 : $name 注意 : a.名字和$配合一起用 b.更规范的写法是 ${name} 2.赋值 : #set($name = "威少") 3.条 ...
- 快速入门系列--MVC--01概述
虽然使用MVC已经不少年,相关技术的学习进行了多次,但是很多技术思路的理解其实都不够深入.其实就在MVC框架中有很多设计模式和设计思路的体现,例如DependencyResolver类就包含我们常见的 ...
- Thymeleaf【快速入门】
前言:突然发现自己给自己埋了一个大坑,毕设好难..每一个小点拎出来都能当一个小题目(手动摆手..),没办法自己选的含着泪也要把坑填完..先一点一点把需要补充的知识学完吧.. Thymeleaf介绍 稍 ...
- Hadoop生态圈-大数据生态体系快速入门篇
Hadoop生态圈-大数据生态体系快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.大数据概念 1>.什么是大数据 大数据(big data):是指无法在一定时间 ...
- spring boot入门教程——Spring Boot快速入门指南
Spring Boot已成为当今最流行的微服务开发框架,本文是如何使用Spring Boot快速开始Web微服务开发的指南,我们将使创建一个可运行的包含内嵌Web容器(默认使用的是Tomcat)的可运 ...
- SpringMVC总结一:快速入门
MVC: MVC是一种架构模型,本身没有什么功能,只是让我们的项目结构更加合理,流程控制更加清晰,一般包含三个组件: **Model(模型)**:数据模型,用于提供要展示的数据.一般包含数据和行为 ...
- springboot2.0整合freemarker快速入门
目录 1. 快速入门 1.1 创建工程pom.xml文件如下 1.2 编辑application.yml 1.3 创建模型类 1.4 创建模板 1.5 创建controller 1.6 测试 2. F ...
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
随机推荐
- Python 常用的内置函数
1. str.isdigit( ) 作用:检测字符串是否有数字组成 2. strip( ) 作用:除去首尾指定的字符,包括空格,换行符,不能除去中间的字符 3. slice( ) 作用:以指定参数切割 ...
- 我的AI之路 —— OCR文字识别快速体验版
OCR的全称是Optical Character Recoginition,光学字符识别技术.目前应用于各个领域方向,甚至这些应用就在我们的身边,比如身份证的识别.交通路牌的识别.车牌的自动识别等等. ...
- Yii2 Apache + Nginx 路由重写
一.什么是路由重写 原本的HTTP访问地址: www.test.com/index.php?r=post/view&id=100 表示这个请求将由PostController 的 action ...
- GoLang学习控制语句之switch
基本结构 相比较 C 和 Java 等其它语言而言,Go 语言中的 switch 结构使用上更加灵活.它接受任意形式的表达式,例如: switch var1 { case val1: ... case ...
- 【hyperscan】示例解读 pcapscan
示例位置: <hyperscan source>/examples/pcapscan.cc参考:http://01org.github.io/hyperscan/dev-reference ...
- joi库 学习笔记
零.背景 node.js 应用中,req.query / req.body 传来的参数需要做 valication( 合法性验证 ) 一.安装 https://github.com/hapijs/jo ...
- D12——C语言基础学PYTHON
C语言基础学习PYTHON——基础学习D12 20180912内容纲要: 1.数据库介绍 2.RDMS术语 3.MySQL数据库介绍和基本使用 4.MySQL数据类型 5.MySQL常用命令 6.外键 ...
- 【learning】 扩展lucas定理
首先说下啥是lucas定理: $\binom n m \equiv \binom {n\%P} {m\%P} \times \binom{n/P}{m/P} \pmod P$ 借助这个定理,求$\bi ...
- centos clamav杀毒软件安装配置及查杀,没想到linux下病毒比windows还多!
centos clamav杀毒软件安装配置及查杀,没想到linux下病毒比windows还多! 一.手动安装 1.下载(官网) cd /soft wget http://www.clam ...
- 剑指offer四之重建二叉树
一.题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7 ...