为什么说最新呢,因为velocity的资料实在是旧的可以了。。。。现在中文的唯一一本出版的书《Velocity网页程序设计 》,还是2001年的时候发行的。。。唉。。。
于是乎,一手抓着金山词霸,一手开着英文文档,慢慢啃。
最新的1.X velocity enginee版本为1.6.2,09年3月release的,2.0只有一个beta,等正式了再用吧。
除了velocity引擎,还有个比较重要的velocity tools,版本为1.4。
下载地址:http://velocity.apache.org/download.cgi
下载后最好将里面的例子打开,把里面的jar文件都copy出来,因为这个依赖比较复杂
建立web工程,将jar文件copy到WEB-INF/lib下(为什么工程里无法直接引用。。想不通)
这是我最后的目录,先列出来了
velocity作为模板引擎,代替jsp比较好,官方的例子都是直接输出到控制台的,好没意思-。-!
简单的测试下velocity是否成功
1、在web根目录下建立index.vm,在里面敲上:
<html>
#set($hello="Velocity")
<b>
Welcome to $hello World11 !
</b>
</html>
2、配置web.xml,让web服务器到*.vm的请求转为velocity来执行
<servlet>
<servlet-name>velocitylayout</servlet-name>
<servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>velocitylayout</servlet-name>
<url-pattern>*.vm</url-pattern>
</servlet-mapping>
Velocity在更新后使用VelocityViewServlet来处理请求,而以前的VelocityServlet已经被废弃了(网上很多都是使用旧的,害人啊-。-!)
配置后,运行试试
http://localhost:8080/XXX/index.vm
应该会成功的显示出首页来
VelocityViewServlet继承一下没什么好研究的。。。。
velocity还有一个很beautiful的特性,布局功能,你可以自己定义header,footer,content,然后拼起来,成为一个整体,当你想换内容的时候,只要把中间的content内容换掉就好了,整个模板不用更换。
这次我们使用velocityLayoutServlet来代替VelocityViewServlet。
因为VelocityViewServlet只是作为一个页面来显示,而加了layout的好处就是,默认的布局大框架不变,而只是填充的内容不同。就像蛋筒冰淇淋,外面的脆皮筒都是相同的,不同的只是内部的冰淇淋,有草莓味的,苹果味的,香草味的,卡布奇诺味的等等。
将上期的web.xml中的VelocityViewServlet部分改成velocityLayoutServlet,例如:
<servlet>
<servlet-name>velocitylayout</servlet-name>
<servlet-class>org.apache.velocity.tools.view.servlet.VelocityLayoutServlet</servlet-class>
</servlet>
为了查看方便,我再贴一次上一次的目录结构:
接下来,我们需要新建一个布局,作为外部的框架。默认的布局文件名字为default.vm,放在WEB-INF/templates/layout目录下(为什么放这里,等一下再介绍),内容为:
<html>
<body>
it's a default page.
$screen_content
</body>
</html>
其中的$screen_content为veloctiy的页面占位符,相当于冰淇淋的筒做好了,这个地方是放冰淇淋的,我们只要另外做一个内容页引入进来就可以了。
我们再新建另外一个布局文件,命名为page.vm,作为测试布局,当没有任何布局的时候,才会调用默认布局。内容为:
<html>
<body>
<div style="border:solid 1px black;padding:20px;">
$screen_content
</div>
</body>
</html>
布局建好后,我们自然需要填入一些内容,建立内容文件,index.vm,我这里放在WEB-INF根目录下,为的是。index.vm文件内容为:
#set($hello="Velocity")
<b>
Welcome to $hello World !
</b>
$set这些我就不解释了,相当于赋值和初始化变量。
最后,是我们最重要的配置文件,velocity.properties,这个名字是velocity默认的配置文件名,默认位置在WEB-INF目录下,如果名字或者路径非默认,则需要在web.xml的servlet初始化参数中加入相应的路径,这里就不涉及了,需要的请看我的另一篇文章《velocity的默认配置路径》
velocity.properties和之前的有所区别,具体的区别就是路径增多。
# Filepath for error template,
# relative to web application root directory
tools.view.servlet.error.template = error.vm
# Directory for layout templates,
# relative to web application root directory
tools.view.servlet.layout.directory = /layout/
# Filepath of the default layout template
# relative to the layout directory
# NOT relative to the root directory of the webapp!
tools.view.servlet.layout.default.template = Default.vm
input.encoding=gbk
output.encoding=gbk
webapp.resource.loader.path=/
webapp.resource.loader.path=/WEB-INF/templates/
velocimacro.library=VM_global_library.vm
在定义了webapp.resource.loader.path这个根目录后(可多个),velocity就会自动在这个目录下寻找相应的文件。看了绿色的英文注释后,应该明白,error.vm是根据webapp的目录寻找,default.vm是根据配置的layout目录寻找。
运行下看看,是不是默认布局出来了,两者整合在一起了。
如果url写成index.vm?layout=page.vm这种形式,那么,就会调用到特定的布局。
也可以在vm一开始就设定好该页使用的布局。
#set($layout = "page.vm" )#set($hello="Velocity")
<b>
Welcome to $hello World11 !
</b>
这样,就可以直接使用布局。当不存在该布局时,就会调用默认布局。
懒人的第二期结束-。-!敬请期待第三次。。。。