`
yonguo
  • 浏览: 245941 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

重构之Velocity应用经验(转贴)

阅读更多

新版Dlog4J绝大部分改用了Velocity来充当View展示层,此中也累积了几点印象深刻的经验,在这里做个简单的介绍:

1)嵌套vm
2)内置对象
3)taglib的改造
4)vm的reload问题
5)exception处理问题
6)数组的访问

1)嵌套vm,在vm中可使用#parse来嵌套另外一个vm,对应的在jsp方面就是嵌套jsp,但嵌套在内的jsp和外部的jsp无法共用变量,非常不方便,而velocity不存在这方面的问题,变量完全共享,如:
->a.vm 里嵌套 b.vm;
->a.vm 里定义了变量 $param;
->b.vm 里可以直接使用$param,无任何限制。
但需要特别注意的是,如果b.vm里同时定义有变量$param,则b.vm里将使用b.vm里定义的值;

2)内置对象
Velocity内置了一些对象,在vm模版里可以直接调用,列举如下:
$request、$response、$session,另外,模板内还可以使用 $msg内的消息工具访问 Struts 的国际化资源,达到简便实现国际化的方法。

3)taglib的改造
taglib是Struts中一个重要的功能,但也有不足之处,后继参与开发和维护的人员不能很容易的掌握其作用,以及这些特殊的标签容易使页面的美工设计人员不容易处理等等。
如果原来View层编码规范,在jsp中出现的java代码比较少或者没有,则改造到Velocity也就比较容易。

替代taglib的方法很多,也很简便,比如Macro宏,类似JavaBean的使用方式等,而Dlog4J采用了综合的方法,具体说就是使用 ObjectTools extends VelocityTool,并在Velocity的配置文件velocity-toolbox.xml中配置好在模版上的变量名,进而所有的vm模版都可以直接使用ObjectTools,vm模版全部通过ObjectTools来统一访问DAO进而读取数据展示。

4)vm的reload问题
有时会发现vm模版修改后进行新请求时,页面会继续采用更改前的模版,这是因为模版的加载是有一定时间间隔的,如要更改立即生效,需要在velocity-(*).jar 包中,找到\org\apache\velocity\runtime\defaults 目录,更改Velocity默认的配置文件:velocity.properties,修改如下2项:
file.resource.loader.cache,模版文件是否进行缓冲
file.resource.loader.modificationCheckInterval,模版资源的修改检测间隔。
用rar把velocity-(*).jar 解压,得到资源文件后修改再更新回.jar 内。

5)exception处理问题
由于与Struts结合,使用了Velocity工具包:velocity-tools-1.1.jar,其中的org.apache.velocity.tools.view.servlet.VelocityViewServlet 是默认的Velocity处理引擎,所有的异常处理也都交到VelocityViewServlet的error方法处理,没有类似jsp的 errorPage,所以不能对异常进行方便的包装,所以要想封装exception,只有通过改造VelocityViewServlet来实现。

Dlog4J中增加了dlog4j.VelocityServlet,继承VelocityViewServlet并覆盖了error的处理办法,从而实现对异常的封装和包裹。

6)数组访问
对数组的访问在Velocity中存在问题,因为Velocity只能访问对象的方法,而数组又是一个特殊的Array,所以虽然数组可以进行循环列举,但却不能定位访问特定位置的元素,如 strs[2],数组对固定位置元素的访问调用了Array的反射方法get(Object array, int index),而Velocity没能提供这样的访问,所以数组要么改成List等其他类容器的方式来包装,要么就通过公用Util类的方式来提供,传入数组对象和要访问的位置参数,从而达到返回所需值的目的。

另外在这里值得一提的是,FreeMarker在模板方面,比Velocity有了更多的改进,包括在数组处理方面提供:使用类似[i]语法的索引方式访问数组元素,以及可以查询数组长度。

引用地址: www.dlog.cn/html/diary/showlog.vm

分享到:
评论
1 楼 bloodwolf_china 2007-09-11  
Velocity 提供了toolbox加载机制解决对数组、日期、运算等处理。如ListTool就有对数组的直接定位访问功能。

相关推荐

    Velocity模板应用案例

    【Velocity模板应用案例】 Velocity是Apache软件基金会的一个开源项目,它是一个基于Java的模板引擎,用于生成动态内容。Velocity通过将逻辑与呈现分离,使得开发者可以专注于业务逻辑,而设计师可以自由地设计页面...

    Velocity 应用示例

    - **resources** 目录:可能存储 Velocity 配置文件(如 `velocity.properties`),以及应用中使用的资源文件。 - **src/main/java** 目录:包含 Velocity 相关的 Java 类,如控制器、模型类和 velocity 工具类。 - ...

    Velocity Web应用开发

    ### Velocity Web应用开发知识点详解 #### 一、Velocity概述及应用场景 Velocity 是一款基于 Java 的模板引擎,主要用于生成动态内容,特别是在 Web 开发领域。它能够帮助开发者快速地构建出可读性强、易于维护的 ...

    velocity-1.5.jar,velocity-1.6.2-dep.jar,velocity-tools-1.3.jar

    Velocity是Apache软件基金会的一个开源项目,它...总的来说,Velocity和Velocity Tools是Java Web开发中的重要组件,它们帮助开发者构建高效、可维护的Web应用,同时保持前后端的清晰分离,提高了开发效率和用户体验。

    velocity插件

    Velocity 是一款基于 Java 的模板引擎,它被广泛应用于 Web 开发中,特别是作为 Apache Struts 和 Spring MVC 框架的一部分。Velocity 插件则是为了在开发环境中提供对 Velocity 模板语言的支持,使得开发者可以在 ...

    velocity web开发

    在Web开发领域,Velocity是一个非常重要的模板引擎,它被广泛应用于生成动态网页内容。Velocity由Apache软件基金会开发并维护,是Apache Jakarta项目的一部分。其设计目标是提供一个简单易用但功能强大的工具,用于...

    Velocity本地化应用举例

    Velocity是Apache软件基金会的一个开源项目,它是一款强大的模板引擎,常用于Java应用程序中的视图层。Velocity通过将逻辑与表示分离,使得开发者可以专注于业务逻辑,而设计师则可以专心于页面设计。本篇文章将深入...

    Velocity模板应用

    ** Velocity模板应用详解 ** Velocity是一款强大的Java模板引擎,它为开发者提供了一种与呈现逻辑分离的方式,使得HTML、XML或者其他格式的文档可以更清晰地与业务逻辑代码分开。Velocity被广泛应用于Web应用开发,...

    javaWeb应用开发之velocity模板使用

    velociy模板引擎介绍,使用example,demo。开发教程。

    velocity入门使用教程

    Spring MVC是目前流行的Java Web框架之一,将Velocity集成到Spring MVC应用中可以实现前后端的分离。本部分将讲解如何在Spring MVC框架中整合Velocity,并通过实例演示其使用。 1. 在Spring MVC项目中添加对...

    velocity 入门文档及应用源码,很适合做自动代码生成

    Apache Ant是一个Java项目管理工具,可以用于编译、打包和部署应用程序。将Velocity与Ant结合,可以自定义模板生成符合特定需求的源代码,比如数据库访问层、实体类或者控制器代码。通过这种方式,开发者可以提高...

    velocity的jar包

    3. **上下文(Context)**:Velocity中的Context对象是数据传递的桥梁,它连接了应用程序和模板。开发者可以将数据放入Context,然后在模板中访问这些数据。 4. **宏**:Velocity支持宏定义,宏类似于函数,可以在...

    java Web 应用开发之velocity模板使用.doc

    Java Web应用开发中,Velocity模板是一个强大的工具,用于将静态页面设计与动态数据结合,实现MVC架构中的视图层。Velocity是一个基于Java的模板引擎,它的主要目标是将Java代码从HTML页面中分离,让网页设计师专注...

    《Velocity Web应用开发指南中文版》.doc

    - **《DB4O中文系列之起步篇》**:虽然与Velocity关系不大,但提供了关于DB4O数据库的入门知识。 以上内容涵盖了从Velocity的基础介绍到高级应用的各种知识点,希望能够帮助读者全面了解如何利用Velocity构建高效、...

    velocity所需的jar包

    Velocity Tools还可以与Spring、Struts等其他框架集成,增强应用的功能。 `commons-collections.jar`和`commons-lang.jar`是Apache Commons项目的一部分,它们为Java开发提供了额外的集合操作和通用语言工具。这两...

    Velocity之HelloWorld配置

    ** Velocity之HelloWorld配置详解 ** Velocity是一款Java模板引擎,它是Apache软件基金会的Jakarta项目之一,主要用于生成动态Web内容。Velocity通过将内容展示与业务逻辑分离,使得开发者可以专注于后端逻辑,而...

Global site tag (gtag.js) - Google Analytics