Velocity学习3
Velocity快速入门教程
Apache的速度是一个基于Java的的模板引擎(模板引擎),它允许任何人仅仅简单的使用模板语言(模板语言)来引用由java的代码定义的对象。
官网介绍如下:
Velocity是一个模板引擎,可用于多种用途。一些使用Velocity的常见应用程序类型是:
- Web应用程序。Web设计人员使用占位符创建HTML页面以获取动态信息。该页面使用VelocityViewServlet或任何支持Velocity 的框架进行处理。这种Web应用程序开发方法称为模型 - 视图 - 控制器或MVC,旨在直接替代使用Java Server Pages(JSP)或PHP开发的应用程序。
- 源代码生成。Velocity可用于基于模板生成Java源代码,SQL或PostScript。该PoweredByVelocity页面列出了一些在这种方式中使用Velocity开源和商业开发的软件包。
- 自动发送电子邮件 许多应用程序会为帐户注册,密码提醒或自动发送的报告生成自动电子邮件。使用Velocity,电子邮件模板可以存储在文本文件中,而不是直接嵌入到Java代码中。
- XML转换。Velocity提供了一个名为Anakia的ant任务,它读取XML文件并使其可用于Velocity模板。常见的应用程序是将以通用“xdoc”格式存储的文档转换为样式化HTML文档。
从2.0版开始,Velocity也可以作为脚本引擎集成到Java Scripting Language Framework(由JSR-223规范定义)中。
Velocity主要使用场景如下:
- Web应用:开发者在不使用JSP的情况下,可以用Velocity让HTML具有动态内容的特性。
- 源代码生成:Velocity可以被用来生成Java代码,SQL或者PostScript。
- 自动电子邮件:很多软件的用户注册,密码提醒或者报表都是使用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引擎会列出中的值循环赋给元变量,同时会创建一个$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”)
输出的结果为你好速度
六,#parse和#include
#parse
状语从句:#include
指令的功能都是在外部引用文件,而两者的区别是:#parse
会将引用的内容当成类似于源码文件,会将内容在引入的地方进行解析,#include
是将引入文件当成资源文件,会将引入内容原封不动地以文本输出。分别看以下例子:
foo.vm文件:
#set($name =“velocity”)
parse.vm:
#parse(“foo.vm”)
输出结果为:速度
include.vm:
#include(“foo.vm”)
输出结果为:#set($ name =“velocity”)
API实战
1,Singleton模型
使用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;
/**
* ${DESCRIPTION}
*
* @author Ricky Fung
* @date 2017-03-10 13:44
*/
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());
}
}
2,单独实例
使用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;
/**
* ${DESCRIPTION}
*
* @author Ricky Fung
* @date 2017-03-10 13:48
*/
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();
参考资料
作者:FX_SKY
链接:https://www.jianshu.com/p/82e5df3b4a1d
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
Velocity学习3的更多相关文章
- Velocity学习
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11790482.html Velocity学习: 1. velocity对大小写敏感 2. ve ...
- velocity学习总结
什么是velocity velocity是一个基于Java的模板引擎,它可以实现彻底的前后端,前端不允许像jsp那样出现Java代码,而是利用context容器传递变量,在java代码里面我们可以往容 ...
- Velocity学习笔记
一.为什么要使用velocity? 很多人下载了EasyJWeb的开源应用示例,但是对动态页面模板文件中的标签使用不是很熟悉,这里简单介绍一下.EasyJWeb特定把视图限定为Velocity,因为我 ...
- Velocity学习4
Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象. 当Veloci ...
- Velocity学习2
Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象. 当Veloci ...
- 模板引擎Velocity学习系列-#set指令
#set指令 #set指令用于向一个变量或者对象赋值. 格式: #set($var = value) LHS是一个变量,不要使用特殊字符例如英文句号等,不能用大括号括起来.测试发现#set($user ...
- velocity学习记录
一.引入文件 静态引入:#include("./footer.vm.html") 动态引入:#parse("./header.vm.html") 说明:./为v ...
- velocity模板引擎学习(1)
velocity与freemaker.jstl并称为java web开发三大标签技术,而且velocity在codeplex上还有.net的移植版本NVelocity,(注:castle团队在gith ...
- 一个Velocity Template Language学习的框架
Velocity Template Language(VTL)使得数据展示和后台代码的开发分离开来,最初用在基于servlet的网站开发上,它的这一特性使得它在应付MVC Web开发模式时显得尤其合适 ...
随机推荐
- d3js path generator vs layouts
我们知道d3的一般套路就是d3.selectAll('path.mypath').data(yourDataset).enter().append('path').attr('class','mypa ...
- C# Json转对象
第一步,项目添加negut的搜索Newtonsoft.Json,安装第一个:如图所示: 安装以后,自动引用. private ObservableCollection<Traffic> m ...
- Python(二)列表的增删改查
一,列表的增删改查 列表中增加元素: 1,从列表的末尾增加一个元素:append("") 2,从列表中插入一个元素:insert(下标位置,插入的元素) 合并列表: 1,name. ...
- win10 虚拟机 hyper-v 安装 centos 7
一.win 10 企业版 自带虚拟机 hyper-v 1.控制面板-->程序和功能-->启用或关闭Windows功能 勾上 hyper-v 确定就ok了 2.安装成功后会发现在 左下角“开 ...
- 铁乐学Python_day05-字典dict
1.[字典dict] Python内置了字典:dict的支持,dict全称dictionary, 在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 字典和列表直观上 ...
- 服务器安装LNMP及构建个人站点
服务器安装LNMP(centos6.6+nginx1.7.12+mysql5.6.24+php5.6.7) 本次安装 centos6.6+nginx1.7.12+mysql5.6.24+php5.6 ...
- Istio 1.1尝鲜记
近几天Istio1.1的发布引起了技术界巨大的反响,为了让更多技术爱好者能够亲自体验Istio1.1,公司的技术大佬赶出了这篇尝鲜教程,其中包括环境.安装.可能遇到的问题及解决方式等,希望对大家有所帮 ...
- iis里URL重写重定向,http做301重定向https
上一篇文章写了iis和apache共用80端口,IIS代理转发apache. 因为第一次配置,这中间还是碰到了很多问题.这里记录下来,希望以后能避免错误. 使用Application Request ...
- python第九课——while死循环
2.3.无限循环/死循环: 何时发生无限循环? 循环条件永远为True,就出现了无限循环 [注意] 无限循环是需要避免的,因为它极其占用系统资源: 但是配合我们之后讲的break等关键字,就会变得更有 ...
- python第三课——数据类型2
day03: 1.列表:list 特点:有序的(有索引.定义和显示顺序是一致的).可变的(既可以改变元素内容也可以自动扩容).可重复的. 可以存储任何的数据类型数据 定义个列表如下: lt = ['宋 ...