杂七杂八的看了一些velocity的资料,把所见所得做个简单不系统的笔记写下来,算是增强记忆。
动态语言的特性:
动态语言需要一个解释器,而这个解释器一般在服务器中。
MVC
Model:系统和应用的状态表示,一般是类或者其他数据结构。可以改变系统状态的Actions和method。典型的javabean。设计初衷就是为了数据和显示的分离
View:显示结果数据的组成部分,随着model的不同以及状态改变,view也要相应的做出变化。
Controller:用户和应用之间交互的桥梁。Controller捕获用户的输入,并利用既定逻辑决定将这些命令输入路由到哪一个model进行处理。
只使用jsp技术叫做model 1
加入servlet后叫做model 2
什么是Velocity
Velocity is a template language designed to give Web designers an easy way to
present dynamic information to users of a Web site or application.
Velocity有个集合叫做context,说白了就是controller和model层的封装,提供了网页模板。
实现了velocity的代码将利用从context中的对象里获取的数据替换模板中的脚本元素。
Velocity的使用简单代码:
一个简单的语言描述过程就是:将velocity初始化并在context中put进去对象,然后template加载某个vm模板,然后用template将这个vm和context进行merge,就生成了view页面了。
Context可以把其他类型的数据put进来,velocity会自动的调用这些对象的toString方法。
下面重点说说context。
Context介绍
Context本质上是一个介于java代码层和velocity模板层之间的一个数据桥梁。Java开发人员将各种各样的数据对象放到context中,页面模板设计人员从context取得这些对象的reference。Velocity中定义了VelocityContext来提供基本实现。这个实现与java中的hashtable类似,最有用和常用的方法就是
Public Object put(String key, Object value);
Public Object get(String key);
如果理解了context的容器特性,那么什么东西能放进去呢?context首先支持放一些迭代对象(Iterative Objects),比如对象数组Object[], java.util.Collection, java.util.Map, java.util.Iterator, java.util.Enumeration, 以及任意的有public Iterator iterator()方法的public class。其次context还支持put静态类(static class),比如context.put(“Math”, Math.class)。当然,在velocity运行时模板 产生的对象也可以放到context中。
Velocity的三种reference
变量variable:对应java对象的一种字符串化的表示,它返回的值是调用了java的toString方法后的结果。
方法method:调用所引用对象的某个方法,该方法必须是public类的一个public方法。如果该方法有返回值,那么velocity在调用完方法后会同样的对返回值进行toString包装。对参数的要求是velocity要求所有的方法参数也必须是string的。
属性property:类似方法,除了访问java类的属性外,还等价于get***方法。
$!前缀是quiet notation符号,用这个前缀产生的引用在引用对象不存在的时候,会返回“”字符串而不是不存在的对象的名字的字符串。
“"”是转义字符,可以转义$符号和其他符号
Velocity指令
#stop:用于debug,当engine遇到这个指令,就会停止执行,并将控制权返回给调用程序。
#include:用于包含外部文件,将外部文件的内容直接加入程序中。
#parse:与include类似,但是不同之处在于,include引入的是静态的文件,而parse会动态的加载模板,也就是说,parse会解析vm文件,然后再加入到源文件中去。
#set:就是一个很强大的赋值指令,不管被赋值的变量是否已经存在或赋值,新的set指令会完全覆盖。指令格式就是#set(ref=value)。几个值得注意的set用法如下
List和range的用法可以等同的看做是java里的ArrayList。
对boolean值的set,set支持短路short circuit
- <script type="text/java script">BAIDU_CLB_fillSlot("771048");
- 点击复制链接 与好友分享! 回本站首页 <script> function copyToClipBoard(){ var clipBoardContent=document.title + '\r\n' + document.location; clipBoardContent+='\r\n'; window.clipboardData.setData("Text",clipBoardContent); alert("恭喜您!复制成功"); }