`
xinklabi
  • 浏览: 1560534 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
文章分类
社区版块
存档分类
最新评论

Velocity简介和Velocity与Jsp、Freemarker的对比(java常用的三种表现层技术)

 
阅读更多

Velocity 是一个基于java 的模板引擎(template engine). 它可以让视图的设计者在web 页面中引用java 代码中定义的数据对象和命令。从而使Web designers 和java 开发者依照MVC 思想(Model-View-Controller )开发系统,这意味着Web designers 只须将精力注用于良好表现力的视图外观设计,而Java程序员则只要关心着如何写出高效简洁的java 对象以实现业务逻辑—–Velocity 会将他们组装到一起.

相比传统的jsp、PHP 等脚本语言,Velocity 彻底的将避免了在视图设计中出现的java 代码, 从而保证了web site 的长期可维护性.

Apache 站点提供的另外一个框架Turbine可以和Velocity 有效结合以实现true MVC model.

一、我们来简要看看Velocity模板语言(VTL)

1、VTL 声明( statement),所有的VTL statement 都是以#开头,且包含一个指示符,当客户访问你的页面时, the Velocity Templating Engine 将搜索页面中的所有# 符号,如果确定这是一个VTL 声明时就按一定规则处理动态内容, 符号#仅仅只是表明这可能是一个VTL 声明.

2、VTL注释:单行注释是以## 开头的一行文字.如要写下多行注释,将它们放入#* 和*#间

3、Velocity references 从java 语法中汲取了一些优点以便模板设计者更容易使用VTL.

       VTL 汲取了java 语法和java bean 的一些简洁语法以解析java 代码中Context 中的对象和这些对象的命令及属性—这样,一个java 对象的所有功能都可以展示到视图中了.

4、References(引用)

VTL 中有三种references:变量引用(variables),属性引用(properties)和命令引用(methods). 做为一个使用VTL 的设计者, 你和你的java 软件工程师必须就模板中引用的特定名了(就是$后的名字)达成一致的协议!这样,模板和java 代码才可按照你们的意图去结合以输出正确的内容.

所有的引用在模板中都表现为一个字符串. 假设一个引用变量$foo 的值事实上是一个int, Velocity engine 在处理时将调用它的.toString()去解析这个字符串所代表的对象(int).

注意:模板中引用的必须是通过java Bean 中的getter/setter 实现的,而直接的java 对象的数据域是不能直接引用的,如$foo.Name 会解析到class Foo’s getName() 的实例方法,但不会解析到Foos 类的public Name 这个实例变量.

5、指令(directives)

模板设计者使用“引用“生成动态内容, 指令(directives) – 简单的说就是设计者在模板中操作java对象—让视图设计者全面控制输出内容的格式.

指令总是以#开头后面紧跟具体的指令符.

注意:set指令中,如果右边的操作数是一个属性或命令的引用而返回null,那么赋值将不会成功,且在随后的VTL中也不能再取出使用. 如下例:

#set( $result = $query.criteria(“name”) )

The result of the first query is $result

#set( $result = $query.criteria(“address”) )

The result of the second query is $result

如果$query.criteria(“name”) 返回的是字符串”bill”, 但$query.criteria(“address”) 返回null,上面的TVL 输出结果将是:

The result of the first query is bill

The result of the second query is bill

6 指令#literal 元素可以用来输出字面意思,如下:

#literal()

#foreach ($woogie in $boogie)

nothing will happen to $woogie

#end

#end

会输出::

#foreach ($woogie in $boogie)

nothing will happen to $woogie

#end

7、属性引用中的属性查找规则

前己提及,属性可以引用到对象的命令. Velocity 会使用合适的策略选择引用到的命令. 它会根据协定

的命令命令格式查找. 无论属性引用的的名字是否大小写,Velocity 都有固定的查找规则.如在

$customer.address 引用时,查找顺序是:

1. getaddress()

2. getAddress()

3. get(“address”)

4. isAddress()

对于VTL中大写的属性名Address 引用,将是:

1. getAddress()

2. getaddress()

3. get(“Address”)

4. isAddress()

8、Velocity使用==来做比较

注意:==计算与java中的==计算有些不同:不能用来测试对象是否相等(指向同一块内存)Velocity中是否相等仅直接的用来比较numbers,strings的值,orobjects的toString()结果是否相等.如果是不同的对象,会调用它们的toString()命令结果来比较.

9、当Velocity应用余应用程序时,一般分一下几步:

(1)、初始化Velocity

  (2)、创建context对象

(3)、添加数据到context

(4)、选择模板

(5)、合并模板和数据,产生输出页面

、Velocity与Jsp、Freemarker的对比

在java领域,表现层技术主要有三种:jsp、freemarker、velocity。

jsp是大家最熟悉的技术 
优点: 
1、功能强大,可以写java代码 
2、支持jsp标签(jsp tag) 
3、支持表达式语言(el) 
4、官方标准,用户群广,丰富的第三方jsp标签库 
5、性能良好。jsp编译成class文件执行,有很好的性能表现 
缺点: 
jsp没有明显缺点,非要挑点骨头那就是,由于可以编写java代码,如使用不当容易破坏mvc结构。

velocity是较早出现的用于代替jsp的模板语言 
优点: 
1、不能编写java代码,可以实现严格的mvc分离 
2、性能良好,据说比jsp性能还要好些 
3、使用表达式语言,据说jsp的表达式语言就是学velocity的 
缺点: 
1、不是官方标准 
2、用户群体和第三方标签库没有jsp多。 
3、对jsp标签支持不够好

freemarker 
优点: 
1、不能编写java代码,可以实现严格的mvc分离 
2、性能非常不错 
3、对jsp标签支持良好 
4、内置大量常用功能,使用非常方便 
5、宏定义(类似jsp标签)非常方便 
6、使用表达式语言 
缺点: 
1、不是官方标准 
2、用户群体和第三方标签库没有jsp多

性能:velocity应该是最好的,其次是jsp,普通的页面freemarker性能最差,但是在复杂页面上(包含大量判断、日期金额格式化)的页面上,freemarker的性能比使用tag和el的jsp好。

分享到:
评论

相关推荐

    jsp、freemarker、velocity简介和对比

    jsp、freemarker、velocity简介和对比。---如果你已经开发Java Web应用程序一段时间,那么对于 JVM 的 PermGen 问题可能并不陌生。由于 FreeMarker 模板不编译成类,它们不占用 PermGen 空间,并不需要一个新的类...

    ftl与jsp比较

    实在是不明白FreeMarker比JSP好在什么地方,在java领域,表现层技术主要有三种:jsp、freemarker、velocity。

    网站性能优化 Web开发 JSP java

    2.缓存技术(当数据更新比较快,几秒钟更新一次,或者需要实时反映数据变化,或者页面具有很多种风格,不便于生成静态页面) 页面缓存(局部缓存和全局缓存)(View,html代码) 缺点:不能做到实时更新 优点:比二...

    java开发常用jar包

    commons-beanutils.jar Apache Commons包中的一个,包含了一些Bean工具类类。必须使用的jar包。 commons-collections.jar ...velocity基于java的模板引擎,允许用简单的模板语言来引用java定义的对

    FreeMarkerdd

    FreeMarker是和velocity,jsp共称为java显示层的三个显示技术,

    FreeMarker技术指南

    二、FreeMarker与JSP、Velocity的对比 三、一个简单的FreeMarker Demo 四、FreeMarker的数据模型 五、模板的常用指令 六.常用的FTL标记 七、内建函数: 八、FreeMarker macro(宏)的使用 九、通过Struts2设置type来...

    Java Web开发视频教程

    Java在客户端的应用有java applet,不过使用得很少,Java在服务器端的应用非常的丰富,比如Servlet,JSP和第三方框架等等。Java技术对Web领域的发展注入了强大的动力。 Java的Web框架虽然各不相同,但基本也都是...

    fis3-uap:基于FIS3,封装以JAVA为后端,velocity、JSP、FreeMarker为模板的UAP前端解决方案

    UAP基于FIS3,封装以JAVA为后端,velocity、JSP、FreeMarker为模板的UAP前端解决方案安装npm install fis3 uap -g使用开发 uap release生产 uap release prod

    SSH相关整合的总要资料

    是一个为开发基于模型(Model)-视图(View)-控制器(Controller)(MVC)模式的应用架构的开源框架,是利用Java Servlet和JSP构建Web应用的一项非常有用的技术。其官方网站如下: 是一个开源框架,是为了解决企业应用...

    java web 开发详解

     优点: 对覆盖绑定(overriding binding)、验证(validation)等提供生命周期管理 与许多表示层技术/框架无缝集成:JSP/JSTL、Tiles、Velocity、FreeMarker、Excel、XSL、PDF 等 便于测试——归功于IoC 缺点: ...

    appch_java.zip

    使用Servlet或者Filter拦截请求,使用MVC的思想设计架构,使用约定,XML或 Annotation实现配置,运用Java面向对象的特点,面向对象实现请求和响应的流程,支持Jsp,Freemarker,Velocity等视图。JSP优点: Java EE...

    JSP页面静态化

    包括使用freemarker和velocity两种技术来实现静态化。压缩包里面的文件有说明文档,说得很仔细,特别适合入门级别的人参考。还有freemarker和velocity开发所需要的jar包和插件。

    Freemarker介绍

    1.freemarker是一个用Java开发的模板...常用的java模板引擎还有 jsp、Freemarker、Thymeleaf、Velocity等 2.模板+数据模型=输出 freemarker并不关心数据的来源,只是根据模板的内容,将数据模型在模板中显示并输出文件

    Java Web程序设计教程

    7.4freemarker与velocity的比较 171 本章小结 171 课后练习 172 第8章hibernate框架基础 173 8.1orm简介 173 8.1.1应用orm的意义 173 8.1.2流行的orm框架 174 8.2准备hibernate运行环境 174 8.2.1下载与安装...

    超完整FreeMarker中文教程,代码

    什么是FreeMarker? ................................................................................................. 7 我们应该阅读什么内容? .............................................................

    电子商城系统设计实习报告.doc

    与许多表示层技术/框架无缝集 成:JSP/JSTL、Tiles、Velocity、FreeMarker、Excel、XSL、PDF 等。便于测试——归功于IoC。 Spring MVC缺点: 大量的XML配置文件,太过灵活——没有公共的父控制器,没有内置的Ajax...

    java-web-tags.zip_4 3 2 1_JAVA 语法 大全_JSTL_jsp 表单_web-tags

    java web 标签大全,包括1、struts 1 各类型标签;2、struts 2 标签;3、jstl 各类型标签;4、spring 标签;5、jsf标签;6、jsp标签、语法;7、freemarker语法;8、velocity语法;9、ajax常用函数;10、常用js表单...

    java web标签大全

    文件内不仅内含jsp、jstl、struts1、struts2、jsf、freemarker、spring、velocity等常用标签,而且更含有JavaScript和Ajax常用函数的说明和实例。

    JessMA Java Web 应用开发框架 (v3.2.2-20130815).pdf

    本开发手册会详细阐述如何在JessMA中整合FreeMarker、Velocity、UrlRewrite、EHCache-Web、Spring、Hibernate和MyBaits等常用框架和组件。 4) 高性能:性能要求是JessMA的硬性指标,从每个模块的设计到每行代码的...

    JFinal(JAVA 极速WEB ORM框架 ) v3.2.zip

    多视图支持,支持FreeMarker、JSP、Velocity 强大的Validator后端校验功能 功能齐全,拥有struts2的绝大部分功能 体积小仅218K,且无第三方依赖 JFinal页面截图展示  相关阅读 同类推荐:站长常用源码

Global site tag (gtag.js) - Google Analytics