【转载】Velocity模板引擎的介绍和基本的模板语言语法使用
类似于PHP中的Smarty,Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。从而实现界面和Java代码的分离,使得界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点。
另外,Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity也可以为Turbine web开发架构提供模板服务(template service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。
编写Velocity版的Hello World
从http://velocity.apache.org/网站上下载最新的Velocity,这里我们下载了velocity-1.7.zip
解压velocity-1.7.zip,发下其根目录下有两个JAR文件:
velocity-1.7.jar velocity-1.7-dep.jar
其中velocity-1.7-dep.jar包含了:
velocity-1.7.jar commons-collections-3.2.1.jar commons-lang-2.4.jar oro-2.0.8.jar(这些JAR文件位于解压目录的lib目录下)
在JAR包不冲突的情况下可以直接使用velocity-1.7-dep.jar
该文件一般包含如下配置:
runtime.log = F:\project\MusicalInstrumentsStore\velocity_example.log
file.resource.loader.path = F:\project\MusicalInstrumentsStore\vm
input.encoding = UTF-8
output.encoding = UTF-8
runtime.log指定日志文件存放位置
file.resource.loader.path指定模板的加载位置
input.encoding指定输入编码
output.encoding指定输出编码
//初始化模板引擎
Velocity.init("src/velocity.properties");
//获取VelocityContext
VelocityContext context = new VelocityContext();
//为Context设置变量
context.put("title", "HelloWorld");
context.put("author", "arthinking");
//获取模板文件
Template template = Velocity.getTemplate("helloworld.vm");
StringWriter sw = new StringWriter();
//使用模板文件的merge函数合并模板和context提供的变量,输出到StringWriter中
template.merge(context, sw);
sw.flush();
System.out.println(sw.toString());
${who}
${content}
运行Java文件,使用Velocity生成的信息就打印出来了。
Velocity模板语言基本语法
和使用EL表达式差不多,直接使用”.”导航。
如访问object对象的id属性:${object.id }
#foreach($element in $list)
#element
#end
使用判断语句:
#if($condition)
true
#else
false
#end
获取迭代索引值:
默认使用变量名:$velocityCount
也可以自定义此变量名,在velocity.properties中设置:
directive.foreach.counter.name=index
设置索引起始位置为0:
directive.foreach.counter.initial.value=0
遍历Map变量:
#foreach($key in $map.keySet())
$key : $map.get($key)
#end
#set(#a=”Hello World!”)
$a #set($array1=[1..10])
#foreach($entry in $array1)
#entry
#end
//初始化模板引擎
Velocity.init("src/velocity.properties");
//获取VelocityContext
VelocityContext context = new VelocityContext();
//为Context设置变量
context.put("content", "HelloWorld");
context.put("who", "arthinking");
//获取模板文件
Template template = Velocity.getTemplate("helloworld.vm");
//创建输出文件
File output = new File("D:/Velocity/1.html");
if(!output.getParentFile().exists())
output.getParentFile().mkdir();
//创建输出流
FileOutputStream outputStream = new FileOutputStream(output);
OutputStreamWriter writer = new OutputStreamWriter(outputStream);
BufferedWriter bufferedWriter = new BufferedWriter(writer);
template.merge(context, bufferedWriter); bufferedWriter.flush();
outputStream.close();
bufferedWriter.close();
【转载】Velocity模板引擎的介绍和基本的模板语言语法使用的更多相关文章
- springboot:Java模板引擎Thymeleaf介绍
Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎.类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用 ...
- js模板引擎mustache介绍及实例
在Javascript中 mustache.js是实现mustache模板系统. Mustache是一种没有逻辑的模板语法.它可以应用于HTML.配置文件.源代码等任何地方. 它通过使用散列或对象中提 ...
- Jade模板引擎学习(一)安装及基本语法
Jade是一款高性能简洁易懂的模板引擎,Jade是Html的Javascript实现,在服务端(NodeJS)及客户端均有支持. 一.功能 客户端支持 超强的可读性 灵活易用的缩进 块扩展 代码默认 ...
- Java模板引擎FreeMarker介绍和使用
http://blog.csdn.net/shimiso/article/details/8778793
- 基于Velocity开发自己的模板引擎
Velocity是一个基于java的模板引擎(template engine).它同意不论什么人只简单的使用模板语言(template language)来引用由java代码定义的对象. 当Veloc ...
- Spring与后端模板引擎的故事
更多内容,欢迎关注微信公众号:全菜工程师小辉.公众号回复关键词,领取免费学习资料. 现在很多开发,都采用了前后端完全分离的模式,随着近几年前端工程化工具和MVC框架的完善,使得这种模式的维护成本逐渐降 ...
- SpringBoot系列之集成jsp模板引擎
目录 1.模板引擎简介 2.环境准备 4.源码原理简介 SpringBoot系列之集成jsp模板引擎 @ 1.模板引擎简介 引用百度百科的模板引擎解释: 模板引擎(这里特指用于Web开发的模板引擎)是 ...
- SpringBoot入门系列(四)整合模板引擎Thymeleaf
前面介绍了Spring Boot的优点,然后介绍了如何快速创建Spring Boot 项目.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/ ...
- Jade 模板引擎使用
在 Express 中调用 jade 模板引擎 jade 变量调用 if 判断 循环 Case 选择 在模板中调用其他语言 可重用的 jade 块 (Mixins) 模板包含 (Includes) 模 ...
随机推荐
- [转]ionic $state.go passed $stateParams
本文转自:http://stackoverflow.com/questions/19516771/state-go-toparams-not-passed-to-stateparams If you ...
- Codeforces 369E Valera and Queries --树状数组+离线操作
题意:给一些线段,然后给m个查询,每次查询都给出一些点,问有多少条线段包含这个点集中的一个或多个点 解法:直接离线以点为基准和以线段为基准都不好处理,“正难则反”,我们试着求有多少线段是不包含某个查询 ...
- sql 入门经典(第五版) Ryan Stephens 学习笔记 (第六,七,八,九,十章,十一章,十二章)
第六章: 管理数据库事务 事务 是 由第五章 数据操作语言完成的 DML ,是对数据库锁做的一个操作或者修改. 所有事务都有开始和结束 事务可以被保存和撤销 如果事务在中途失败,事务中的任何部分都不 ...
- java 15-2 Collection的高级功能测试
A: boolean addAll(Collection c):添加一个集合的元素 ,所有的元素,无论是否重复 B: boolean removeAll(Collection c):移除一个集合的 ...
- c++ web服务器
https://github.com/facebook/proxygen http://tengine.taobao.org/ http://code.google.com/p/mongoose/ht ...
- mysql数据库的备份和导入
mysqldump -u root -p --default-character-set = gbk -d demo_db>c:/appserv/www/demosql/sql1.sql//将数 ...
- 关闭log4j 输出 DEBUG org.apache.commons.beanutils.*
2016-03-23 10:52:26,860 DEBUG org.apache.commons.beanutils.MethodUtils - Matching name=getEPort on c ...
- 关于Java多态
什么是多态 同一个实现接口,使用不同的实例而执行不同的操作 子类转换成父类的规则: *将一个父类的引用指向一个子类对象时,称为上转型,自动进行类型转换 *此时通过父类引用变量调用的方法是子类覆盖或继承 ...
- 关于第一个Java应用
一.创建Java源文件 Java应用由一个或多个扩展名为".java"的文件构成,这些文件被称为Java源文件,从编译的角度,则被称为编译单元(Compilation Unit). ...
- 12Mybatis_用mapper代理的方式去开发以及总结mapper开发的一些问题
上一篇文章总结了一些Dao开发的问题,所以我们这里开始讲一种mapper代理的方式去开发. 我先给出mapper代理开发的思路(mapper代理开发的规范): 我们用mapper代理开发时要写2个: ...