由struts衍生出的Velocity技术
来源:互联网 发布:mac usb是2.0还是3.0 编辑:程序博客网 时间:2024/06/06 09:01
今天在看Struts1和Struts2的区别中看到一篇文章中提到struts1的缺陷:只支持JSP作为表现层技术,不能与Velocity,FreeMarker等技术整合。那么其中的Velocity技术指的是什么呢,也没有了解过,上网继续查了资料,马下来,留作以后学习和参考。
Velocity是一种Java模版引擎技术,该项目由Apache提出,由另外一种引擎技术Webmacro引深而来。那什么是官方的Velocity定义呢?Apache对它的定义是:一种基于Java的模板引擎,但允许任何人使用简单而强大的模板语言来引用定义在Java代码中的对象。可以在http://jakarta.apache.org/velocity/index.html查找更多信息。
下面是一个简单的Velocity例子:
1、创建velocity模版(其实和html一样),文件名为:hellovelocity.vm
<html> <title>Hello Velocity</title> <body> Welcome $name to Javayou.com! today is $date. </body></html>2、创建java文件,HelloVelocity.java
package com.fasttalk. velocity;
import java.io.StringWriter;
import java.util.*;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
public class HelloVelocity {
public static void main(String[] args) throws Exception {
//初始化并取得Velocity引擎
VelocityEngine ve = new VelocityEngine();
ve.init();
//取得velocity的模版
Template t = ve.getTemplate("hellovelocity.vm");
//取得velocity的上下文context
VelocityContext context = new VelocityContext();
//把数据填入上下文
context.put("name", "Liang");
context.put("date", (new Date()).toString());
//为后面的展示,提前输入List数值
List temp = new ArrayList();
temp.add("1");
temp.add("2");
context.put("list", temp);
//输出流
StringWriter writer = new StringWriter();
//转换输出
t.merge(context, writer);
System.out.println(writer.toString());
}
}
4、把1上的hellovelocity.vm copy到运行的当前目录下,运行结构如下:
<html> <title>Hello Velocity</title> <body> Welcome Liang to Javayou.com! today is Tue Dec 14 19:26:37 CST 2004. </body> </html>
以上是最简单的运行结果,怎么样,知道个大概吧,模版hellovelocity.vm里的2个定义变量$name和$date分别被context.put("name", "Liang")和context.put("date", (new Date()).toString())所设的值替代了。
由此看来业务流程处理包括业务结果基本在model这层全部解决,而view这一层基本只用使用简单的VTL(Velocity Template Language)来展示。这样,Jsp岂不是不用了么?是的,这样的使用模式有点象早前的CGI方式:)由Velocity自动输出代码,并且Velocity在这方面的能力也很强,Turbine里就采用了Velocity来产生很多代码。
在Velocity中,变量的定义都是使用“$”开头的,$作为Velocity的标识符。字母、数字、中划和下划线都可以作为Velocity的定义变量。
还需要注意的是Velocity特色的变量定义,如:$student.No、$student.Address,它有2层含义:
l 第1种是如果student是hashtable,则将从hashtable中提取key为No和Address的值,
l 另外第2种就是它有可能是调用方法,即上面2个变量将被转换为student.getNo()和student.getAddress()。
Velocity对在servlet中的java code返回的值有对象,还可以调用对象的方法,如$ student.getAddress()等等,在此就不一一举例和深入了。
上面的例子只是简单的举例,现在当然不少人已经不满足这样的例子了,实际的应用中我们还常常需要作些选择性展示和列举一些迭代数据,如List列表,当然Velocity(具体来说应该是VTL模版语言)也支持这项功能,此外还支持其他一些常用的展示,如模版内部的变量(如Jsp内的变量),还有强大一些的如创建宏以实现自动化
- 由struts衍生出的Velocity技术
- 由开发项目衍生出的框架级别副产品
- 由点名软件衍生出的一些小想法
- 由PostgreSQL衍生出来的数据库
- Struts + Velocity的集成
- 由 HashMap 引申出的技术深度讨论
- Struts 与 Velocity 的集成
- Struts 与 Velocity 的集成
- Velocity与struts的结合
- Struts 与 Velocity 的集成
- Struts 与 Velocity 的集成
- Struts 与 Velocity 的集成
- C++容器:容器中衍生出的类型
- 通过代码review,找出bug衍生出的错误逻辑
- C++容器:容器中衍生出的类型
- 关于Linux线程id衍生出的讨论
- jquery EasyUI 心得--------1.datagrid衍生出的奇葩需求
- struts+velocity
- [喵咪Liunx(6)]Nginx日志分析工具goaccess
- Spring 出现Could not resolve placeholder问题的解决方法
- 迅为4418开发板TF卡烧写Android和Qt内容分享
- jquery实现二级导航下拉菜单效果
- java web基本流程
- 由struts衍生出的Velocity技术
- 2017年第3届上海国际零售业设计与设备展会刊(参展商名录)
- HBase之缓存
- 百(千)万级excel导出(流式)
- Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type
- 关于迭代集合同时删除元素报错的问题java.util.ConcurrentModificationException
- @component使用案例
- 重启Tomcat
- [转]软件开发中的deadline该怎么定?