使用Velocity实现客户端和服务器端模板

在 HTML 或者 XML 这样的标准表示或交换格式中,文本性数据的操作和转换是一种频繁而且通常非常单调的活动,每个开发人员都会遇到。模板引擎可以改善这个过程,它在模板中保留输出中的静态部分,而动态生成和安排变化的部分。Velocity 是一种高度实用的、开放源代码的模板引擎,可以方便地集成到其他客户端或服务器端应用程序中。

对于服务器端应用程序,如果与兼容 Servlet 2.3+ 的 Web 层容器集成,Velocity 为 JSP 技术提供了一种可行的替代方案,可以强制实施表示逻辑与应用程序业务逻辑的清晰划分。事实上,Velocity 支持的模板语言非常简单,形成的模板也十分清晰,Web 站点设计人员和样式开发人员可以学习和维护这些模板。

本文中将考察 Velocity 的简单模板语言、创建一些模板并将其用于独立的客户应用程序。然后我们将把这个模板引擎集成到 Struts MVC 框架中作为视图组件。

基本模板引擎操作

基本模板引擎操作非常简单。首先看一看清单 1 中的模板:

清单 1. 基本的 Velocity 模板

<html>
<head>
<title>A Template Based Page</title>
</head>
<body>
<p>This is a page generated by $generatedBy.</p>
<p>The customer's name is $customerName.</p>
</body>
</html>

这个模板是一个完整的 HTML 文件。您可以使用文本编辑器或者喜欢的图形化可视网页编辑器创建该文件。创建的简易性是基于模板的系统的主要好处和要求。

当模板引擎运行时,清单 1 中彩色显示的部分将被实际的数据替换。获取数据并与模板结合的过程称为 合并。看一看清单 2 中的脚本所表示的数据:

清单 2. 为模板合并设置数据值

#set ($generatedBy = "Velocity")
#set ($customerName = "John Doe")

现在,如果清单 1 中的模板与清单 2 中的数据合并,将得到清单 3 所示的结果:

清单 3. 合并到模板中的数据

<html>
<head>
<title>A Template Based Page</title>
</head>
<body>
<p>This is a page generated by Velocity.</p>
<p>The customer's name is John Doe.</p>
</body>
</html>

您可能发现,这种特性和字处理程序中的邮件合并功能类似。在字处理程序中,信函结构与来自邮件列表的名称和地址合并。和邮件合并一样,这种应用程序最适用于要合并的数据源非常大而且有变化的情况。

从这个单纯的意义上讲,Velocity 是一个模板引擎。Velocity 的输出格式仅受文本模板中所能放置的内容的限制。包括现在最流行的格式(HTML、XML、SQL,等等)。

时间: 2024-09-06 23:54:07

使用Velocity实现客户端和服务器端模板的相关文章

php上传图片客户端和服务器端实现方法

 这篇文章主要介绍了php上传图片客户端和服务器端实现方法,涉及php操作文件的技巧,涉及图片后缀验证.文件重命名等常用方法,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了php上传图片客户端和服务器端实现方法.分享给大家供大家参考.具体如下: 前台表单代码 ? 1 2 3 4 <form name="form1" method="post" action="admin_upfile.php" enctype="

php-androi客户端与服务器端的通信问题

问题描述 androi客户端与服务器端的通信问题 我用php写的服务器端, 我想要实现这么一个功能. 假设一共有4台android客户端,每一个客户端都向服务器传两个值(id,value),然后服务器再把所有接收到的值返回给每一个客户端,由此来形成一个数据共享. 从客户端传值到服务器我已经实现了,现在的问题就是怎么把服务器的所有(id,value)数据对返回给android客户端? 解决方案 http无状态 所以要用到比轮循更高级的"push技术" 解决方案二: socket连接 ud

c#客户端和服务器端通信问题

问题描述 c#客户端和服务器端通信问题 服务端ip:192.168.1.214.客户端ip:192.168.1.30 客户端代码public static void ReceiveStart(string localip, string localPort) { try { //创建接受套接字 IPAddress localIP = IPAddress.Parse(localip); IPEndPoint localIPEndPoint = new IPEndPoint(localIP, int

安卓客户端与服务器端有哪些通信方式?

问题描述 安卓客户端与服务器端有哪些通信方式? 安卓客户端与服务器端有哪些通信方式各有什么优缺点怎么根据项目的实际情况选择啊? 或者有什么相关资料推荐也好. 马上毕业小白一个在此先谢谢各位大侠. 解决方案 安卓客户端与服务器端的通信方法主要有长连接和短连接.短连接:是指客户端与服务器通讯双方有数据交互时才建立一个连接,数据发送完毕后就断开此连接,如:http协议.基于该协议的框架如:httpclient长连接:是指客户端与服务器之间始终建立着一个通讯连接,在该连接没有中断之前,客户端与服务器端之

socket-android客户端接收服务器端发来的图片异常

问题描述 android客户端接收服务器端发来的图片异常 threadid=11: thread exiting with uncaught exception (group=0x40a13300) FATAL EXCEPTION: Thread-78 java.lang.NegativeArraySizeException: -2555936 at me.demo.transimage.MainActivity$1$1.run(MainActivity.java:59) 客户端代码 publi

MLDonkey一款性能强劲的P2P客户端和服务器端软件

MLDonkey是一款性能强劲的P2P客户端和服务器端软件.它最著名的特点是没有界面和支持各种不同的P2P协议. 为什么没有界面是优点呢?这意味着MLDonkey可以在系统启动的时候启动并且在后台运行.如果你想给它一些指示,有多种途径可以选择(通过telnet.基于web.监视的小程序和图形界面).独自运行内核意味着可以以自身的用户(mldonkey)来运行程序,而且这个用户没有权限去执行其他操作,这样使得MLDonkey比其他必须以普通用户运行的P2P程序像是aMule和Frostwire更安

pb12如何开发一个客户端与服务器端

问题描述 pb12如何开发一个客户端与服务器端 pb12如何开发一个客户端与服务器端,要添加哪些.dll或.pbl文件吗,参考资料太少里了 解决方案 http://bbs.csdn.net/topics/391856852?page=2#post-400565718 解决方案二: http://bbs.csdn.net/topics/391856852?page=2#post-400565718 解决方案三: http://bbs.csdn.net/topics/391856852?page=2

java 客户端往服务器端传递一个对象时,总是卡死,求解答。

问题描述 java 客户端往服务器端传递一个对象时,总是卡死,求解答. java 客户端往服务器端用ObjectOutputStream的writeObject()传递一个对象时,总是卡死. java.net.BindException: Address already in use: JVM_Bind java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: sun.applet.Appl

android服务器-android客户端的服务器端可以移植到手机本地吗

问题描述 android客户端的服务器端可以移植到手机本地吗 android客户端的服务器端可以移植到手机本地吗实现思路是什么呢,tomcat木有手机android版吧 解决方案 等着你去开发吧!你可以试试 解决方案二: tomcat没有Android端的