开发者社区> 冬至饮雪> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Velocity初探小结--velocity使用语法详解

简介:   做java开发的朋友一般对JSP是比较熟悉的,大部分人第一次学习开发View层都是使用JSP来进行页面渲染的,我们都知道JSP是可以嵌入java代码的,在远古时代,java程序员甚至在一个jsp页面上就完成了所有的业务逻辑代码,能够实用平台的API,这是jsp的一个优点,所谓物极必反,这一点在某些方面也成了它的一个缺点,内容和表示的界限变得很模糊,使得mvc分层不够彻底.
+关注继续查看

  做java开发的朋友一般对JSP是比较熟悉的,大部分人第一次学习开发View层都是使用JSP来进行页面渲染的,我们都知道JSP是可以嵌入java代码的,在远古时代,java程序员甚至在一个jsp页面上就完成了所有的业务逻辑代码,能够实用平台的API,这是jsp的一个优点,所谓物极必反,这一点在某些方面也成了它的一个缺点,内容和表示的界限变得很模糊,使得mvc分层不够彻底.

  Velocity的写法比较接近java的语法,语法非常简单,对于java开发人员来说,从一窍不通到上手使用velocity几乎不需要花很多时间,还有很重要的一点,我觉得是velocity没有很多的标签,自由度比较高.

  Velocity渲染模板时,先把模板解析成一颗语法树,然后去遍历这棵树,分别渲染每一个节点.

  我对velocity也属于刚刚入门的阶段,所以只是简单的总结一下一些常用的语法和基础知识.

#set 语法

  #set可以创建一个Velocity的变量,一般用于向一个变量或属性赋值,下面的第一个例子,大概和java中的String name=user.getName();是一个意思.

  在Velocity语法树中,#set表达式对应的是一个ASTSetDirective类,"="两边的表达式值,分别对应该类的两个子节点,LHS和RHS.

  •     #set($user.name="zhangsan")   可以理解为     user.setName("zhangsan")
  •     #set($name=$user.name)         可以理解为     user.getName();

   像上述例子中的第一个:不仅可以表示 user.setName("zhangsan"),还可以表示user.setname("zhangsan"),或者user.put("name","zhangsan"),这是动态语言的特点,不想java语法那样严格的定义.

  注意:#set表达式,结尾不需要#end跟随,其他表达式基本都需要加#end.

#foreach语法

  这是Velocity中唯一一种循环的语法,类似于java的增强for循环

#foreach($user in $userList)
    .....
#end
--------------------------------
基本和java中的for循环是一个意思
--------------------------------
for(User user:userList){
.....
}

  $userList变量的内容是一个数组, Hashtable 或者 Array. 分配给$user 变量的值是Java的对象和一个变量的引用.

  这里userList是一个List,可以使用$foreach.count来进行简单的循环计数.

  #if( $foreach.hasNext ),可以用来判断是否是最后一次迭代.

  如果你想从零开始进行#foreach循环, 你可以使用 $foreach.index 代替$foreach.count..

  同样的, $foreach.first和$foreach.last也提供了$foreach.hasNext方式.如果你想访问#foreach外面的这些属性, 你能够引用它们通过 $foreach.parent或 $foreach.topmost 属性 ( $foreach.parent.index 或者 $foreach.topmost.hasNext)

  如果你的userList中有很多数据,但你只想遍历前3条,那么可以这么写:

#foreach( $user in $userList )
    #if( $foreach.count > 3 )
        #break
    #else
    .....
  
  #end #end

  

  注意:在#foreach中产生的变量只在foreach的作用范围内有效

#if,#elseif,#else语法

  条件判断语句,语法规则和java也是基本一致的,但是在判断语句的处理上却有很大不同.

  例如#if($user),这里只要$user变量的值不是null,或者不是false,那么就为true.

  表达式中支持很多条件判断,如">","<","==","&&","||"等

#parse语法

  #parse语法的作用是引用其他模块,比如你可以把多个vm文件中重复的代码抽取出来,放到一个单独的"common.vm"文件中,然后再在每一个模块的对应位置使用#parse('common.vm')把公共模块引入到当前模块.

  需要特别注意的一点是,common.vm中的变量的值都可以由#paser()所在的vm文件模板的上下文中取得,也就是说,你只是把一段公共的vm代码放在一个单独的模板文件中,除此之外,和两者在一个模板文件中没有任何其他区别.

  另外#parse()中不仅能引入其他模板文件,也可以引入一个变量.同时需要记得一点,#parse引入的模板文件中,也可以包含#parse.

  说到了#parse就要提到另一个引入的指令#include,也是引入外部文件的意思,他们的区别总结如下:

    1.  #include()可以同时引入多个文件, #parse()只能一次引入一个文件(或变量).
    2.  #include引入的内容不会被Velocity的emplate engine即模板引擎处理, #parse引入的内容会被处理,也就是说#include引入的内容不能包含velocity语法,而后者,当然是可以的.

(转)Velocity和jsp的区别:

  执行方式不一样: JSP是编译执行,Velocity是解释执行.如果JSP文件被修改了,对应的java类就会重新编译,而Velocity却不需要,只是会重新生成一棵语法树.

  执行效率不同:理论上来说,编译执行的效率明显好于解释执行,在JSP中方法调用是直接执行的,而在velocity中使用反射执行的,从这方面来讲JSP效率会明显好于Velocity.如果JSP中有大量的jstl或者其他标签的话,就不一定了.

  需要的环境支持不同:JSP的执行依赖Servlet环境,他需要ServletContext,request,response这些类.而渲染Velocity不需要其他环境的支持,所以说velocity的应用环境更广.

参考资料

  深入分析javaWeb技术内幕-第16章

   《Apache Velocity用户指南》官方文档

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
SpringBoot 项目中使用velocity模板(转载)
(不要使用这种模板了,spring boot最新版已经不支持了。使用FreeMarker吧:http://blog.csdn.net/clementad/article/details/51942629) 简单几步,在spring boot中使用velocity模板生成文本:   1、引入依赖 [objc] view plain copy            org.
2392 0
Velocity入门指南
Velocity简介 Velocity主要目的简化WEB动态页面的开发,能够更加清晰地把VIEW和其他MVC组件区别开。Velocity不但可以用于开发WEB页面,同时也可以用于开发独立运行的应用程序,比如SQL或XML。可以直接支持Turbine Web 应用框架,以及Servlets、Texan等。View和Model通过Context来进行数据关联,将对应的模板渲染成
1132 0
velocity的一些用法
velocity模板其实就是java不分语法的翻译,用到的属性还是java的方法,get,set,等 1.截取部分字段substring 1 原始字符串:$!ag.tagValue,也许很长,前端页面展示时需要截取字符串。
909 0
velocity分页模板
以前用后台java拼接分页代码,不利于修改。找到一份velocity模板。 1 2 #macro(pager $url $pager) 3 4 #set($FRONT_LEN = 3) 5 #set($BEHIND_LEN = 3) ...
851 0
velocity模板引擎学习(3)-异常处理
按上回继续,前面写过一篇Spring MVC下的异常处理、及Spring MVC下的ajax异常处理,今天看下换成velocity模板引擎后,如何处理异常页面: 一、404错误、500错误 1 2 404 3 /nopage.
1008 0
velocity视频
http://velocity.oreilly.com.cn/2011/index.php?func=slidesvideos ...
748 0
+关注
116
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载