Hello $name! Welcome to $site world!
import java.io.StringWriter; import org.apache.velocity.app.VelocityEngine; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; public class HelloWorld{ public static void main( String[] args )throws Exception{ // first, get and initialize an engine VelocityEngine ve = new VelocityEngine(); ve.init(); // next, get the Template Template t = ve.getTemplate( "hellosite.vm" ); // create a context and add data VelocityContext context = new VelocityContext(); context.put("name", "Eiffel Qiu"); context.put("site", "http://www.j2medev.com"); // now render the template into a StringWriter StringWriter writer = new StringWriter(); t.merge( context, writer ); // show the World System.out.println( writer.toString() ); } }
将两个文件放在同一个目录下(假设为d:\workspace\) . 打开命令行窗口,进入d:\workspace, 编译java文件, 而后运行, 如无心外会在控制台看到以下的输出:
javascript
Hello Eiffel Qiu! Welcome to http://www.j2medev.com world记得把 Velocity 依赖添加到类路径中.
来总结一下 Velocity 真正的工做原理:
Velocity 解决了如何在 Servlet 和 网页之间传递数据的问题,固然这种传输数据的机制是在 MVC 模式上进行的,也就是View 和 Modle , Controller 之间相互独立工做,一方的修改不影响其余方变更,他们之间是经过环境变量(Context)来实现的,固然双方网页制做一方和后台程序一方要相互约定好对所传递变量的命名约定,好比上个程序例子中的 site, name 变量,它们在网页上就是 $name ,$site 。 这样只要双方约定好了变量名字,那么双方就能够独立工做了。 不管页面如何变化,只要变量名不变,那么后台程序就无需改动,前台网页也能够任意由网页制做人员修改。这就是 Velocity 的工做原理。
你会发现简单变量名一般没法知足网页制做显示数据的须要,好比咱们常常会循环显示一些数据集,或者是根据一些数据的值来决定如何显示下一步的数据, Velocity 一样提供了循环,判断的简单语法以知足网页制做的须要。Velocity 提供了一个简单的模板语言以供前端网页制做人员使用,这个模板语言足够简单(大部分懂得javascript的人就能够很快掌握,其实它比 javascript 要简单的多),固然这种简单是刻意的,由于它不须要它什么都能作, View 层其实不该该包含更多的逻辑,Velocity 的简单模板语法能够知足你全部对页面显示逻辑的须要,这一般已经足够了,这里不会发生象 jsp 那样由于一个无限循环语句而毁掉系统的状况,jsp 能作不少事情,Sun 在制定 Jsp 1.0 标准的时候,没有及时的限定程序员在 jsp 插入代码逻辑,使得早期的jsp 代码更象是 php 代码,它虽然强大,可是对显示层逻辑来讲,并没必要要,并且会使 MVC 三层的逻辑结构发生混淆。 php