Velocity 是一个基于 Java 的模板引擎,它提供了简单的基于模板的语言,可以用类似脚本的方式引用对象。Velocity 促进了分离团队成员之间的责任:允许 Web 设计人员专注于视图(即页面的观感),而 Java 程序员专注于后端代码。把 Java 代码从页面布局中分离出来,会让 Web 应用程序未来更易维护。当 Velocity 与 Sruts 这样的 MVC 框架结合时,就成了 JSP 或 PHP 可行的替代。
特点:
模板引擎中最强大、使用最频繁的功能之一是它通过内建的映像(Reflection)引擎查找对象信息的能力。这个映像引擎允许用一种方便的Java“.”类似的操作符,提取任意加入到VelocityContext的对象的任何公用方法的值,或对象的任意数据成员。
作用:
1.允许我们在模版中设定变量,然后在运行时,动态的将数据插入到模版中,替换这些变量。
2.有用来比较和迭代的内建指令,通过这些指令我们可以完成程序语言中的条件判断语句和循环语句等
3.模板引擎最常见的用途是处理HTMLWeb内容。但我还用模板引擎生成过SQL、email、XML甚至Java源代码。
Java模板引擎最常见的用途是替代JSP也就不足为奇了。
把 Struts 与 Velocity 模板引擎组合起来很简单,也很直接;实际上,只要用五步就可以实现:
1. 把 Velocity JAR 放在类路径中。
2. 修改 web.xml 文件让它识别 Velocity servlet。
3. 把 Velocity toolbox.xml 放在应用程序的 WEB-INF 目录下。
4. 修改 struts-config,把它的视图指向 Velocity 模板而不是 JSP。
5. 为每个需要显示的页面创建 Velocity 模板。
我将用一个熟悉的搜索用例来演示 Struts 与 Velocity 的集成。在这个示例中,一个简单的应用程序允许用户按照图书的 ISBN 编号搜索图书。应用程序的结果页面显示与 ISBN 编号匹配的图书。
第 1 步:把 Velocity JAR 放在 WEB-INF/lib 下
Velocity 的 Struts 工具提供了所有您熟悉的 Struts 方便特性,但是添加了 Velocity 的灵活性。Velocity 本身是很棒的,但是它的工具包可以帮助您把工作做得更好更快。特别是 Struts 工具模拟了您以前熟悉的 Struts 标记。请参阅下载 一节下载 Velocity 模板引擎和 Velocity 工具。
第 2 步:修改 web.xml,让它识别 Velocity 的 servlet
下一步是修改 Struts 的 web.xml 文件,让它识别 Velocity 的 servlet 并把所有以 .vm 结尾的资源请求定向到 Velocity servlet,如清单 1 所示。
清单 1. 修改 web.xml,声明 Velocity servlet
<servlet>
<servlet-name>velocity</servlet-name> |(1)
<servlet-class> |(2)
org.apache.velocity.tools.view.servlet.VelocityViewServlet
</servlet-class>
<init-param> |(3)
<param-name>org.apache.velocity.toolbox</param-name>
<param-value>/WEB-INFtoolbox.xml</param-value>
</init-param>
<load-on-startup>10</load-on-startup> |(4)
</servlet>
<!-- Map *.vm files to Velocity -->
<servlet-mapping> |(5)
<servlet-name>velocity</servlet-name>
<url-pattern>*.vm</url-pattern>
</servlet-mapping>
让我们来看看清单 1 中发生了什么:
(1)声明了 Velocity servlet 并给了它一个 velocity 句柄。
(2)声明了 Velocity servlet 的类名。
Velocity servlet 接受“toolbox”参数。toolbox 是声明应用程序的可用工具的位置。因此,在清单 1 中,我还做了以下工作:
(3)告诉 VelocityServlet 在哪里可以找到 toolbox 的配置。
(4)设置了 load-on-startup 标记,确保在正确的时间装入 Velocity servlet。任何大于或等于 0 的值都会迫使容器通过调用 servlet 的 init() 方法来装入它。放在 load-on-startup 标记体中的值决定了不同的 servlet 的 init 方法调用的次序。例如,0 在 1 之前调用,而 1 在 2 之前调用。缺少的标记或负值允许 servlet 容器根据自己的选择装入 servlet。
(5)声明了 servlet 映射,强迫所有用 .vm 结尾的资源请求定向到 Velocity servlet。请注意(5)中的<servlet-name> 必须与(1)中的<servlet-name> 匹配。交错的声明和映射会在日志中生成错误。
第 3 步:把 toolbox.xml 放在 WEB-INF 下
利用 Velocity,可以使用(或创建)包含许多工具的工具箱。用来登记类的工具箱中包含有用的函数,常常会用到。幸运的是,Velocity 提供了许多预先构建好的工具。还创建了许多 Struts 工具来模拟原始的 Struts 标记。如果发现需要构建自己的工具,也可以自由地构建。在清单 2 中显示的 toolbox.xml 可以在 Velocity 工具下载中找到。这个文件应当随 Velocity JAR 一起放在 WEB-INF 下。
清单 2. toolbox.xml
<?xml version="1.0"?>
<toolbox>
<tool>
<key>link</key>
<scope>request</scope>
<class>
org.apache.velocity.tools.struts.StrutsLinkTool
</class>
</tool>
<tool>
<key>msg</key>
<scope>request</scope>
<class>
org.apache.velocity.tools.struts.MessageTool
</class>
</tool>
<tool>
<key>errors</key>
<scope>request</scope>
<class>
org.apache.velocity.tools.struts.ErrorsTool
</class>
</tool>
<tool>
<key>form</key>
<scope>request</scope>
<class>
org.apache.velocity.tools.struts.FormTool
</class>
</tool>
<tool>
<key>tiles</key>
<scope>request</scope>
<class>
org.apache.velocity.tools.struts.TilesTool
</class>
</tool>
<tool>
<key>validator</key>
<scope>request</scope>
<class>
org.apache.velocity.tools.struts.ValidatorTool
</class>
</tool>
</toolbox>
第 4 步:修改 struts-config
下一步是修改 struts-config.xml,指向 Velocity 视图而不是 JSP。新的配置文件如清单 3 所示。
清单 3. 针对 Velocity 视图修改后的 struts-config.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">
<struts-config>
<form-beans>
<form-bean name="searchForm" type="app.SearchForm"/>
</form-beans>
<global-forwards>
<forward name="welcome" path="/welcome.do"/>
</global-forwards>
<action-mappings>
<action
path="/welcome"
type="org.apache.struts.actions.ForwardAction"
parameter="/pages/search.vm"/> |(1)
<action
path="/search"
type="app.SearchAction"
name="searchForm"
scope="request"
input="/pages/search.vm"> |(2)
<forward name="success"
path="/pages/results.vm"/> |(3)
</action>
</action-mappings>
</struts-config>
清单 3 看起来就像一个非常典型的 Struts 应用程序,只有一个小小的不同。响应没有把客户转向到 JSP,而直接转向到 .vm 文件(请参阅清单 3 中的引用 1、2 和 3)。在大多数情况下,
把 Struts 应用程序从 JSP 迁移到 Velocity 视图,需要做的仅仅是全局搜索,把 .jsp 替换成 .vm。其他所有东西都可以保持不变!模板可以同样保存在以前保存 JSP 的位置;所需要做的只是用 Velocity 命令代替 JSP 标记。
第 5 步:创建 Velocity 模板
在清单 4 中,可以看到示例应用程序搜索页面的 Velocity 模板。
清单 4. 搜索页面的 Velocity 模板
<HTML>
<HEAD>
<TITLE>Search</TITLE>
</HEAD>
<BODY>
$!errors.msgs()||(1)
<FORM method="POST"
action="$link.setAction('/search')"> |(2)
<h2>Book Search</h2>
ISBN:<INPUT type="text" name="isbn">
<INPUT type="submit" value="Submit" name="submit">
</FORM>
</BODY>
</HTML>
清单 4 是一个没有 JSP 或 Struts 标记的典型的 HTML 页面。但是,以下元素看起来可能不是那么熟悉:
(1)用 $!errors.msgs() 得到错误消息队列中的错误消息。
(2)用 $link.setAction('/search') 获得搜索转发的 URL。
这就成功了 ?? 模板剩下的部分看起来几乎与以前熟悉的 HTML 文件相同。清单 5 显示了应用程序结果页面的模板。
清单 5. 结果页面的 Velocity 模板
<html>
<body>
<h1>Book Details</h1>
<a href="$link.setForward("searchEntry")">Search again</a> |(1)
<h3>$book.title</h3> |(2)
<b>ISBN:</b>$book.isbn<br>|(3)
<b>Title:</b>$book.title<br>|(4)
<b>Author:</b>$book.author<br>|(5)
<b>Price:</b>$book.price<br>|(6)
<b>No Pages:</b>$book.pages<br>|(7)
<b>Description:</b>$book.description<br>|(8)
<b>Publisher:</b>$book.publisher<br>|(9)
</body>
<html>
可以注意到,清单 5 中不包含 JSP 标记或 Struts 标记。我们来详细看看它:
(1)用 Struts 的链接工具把 <a> 标记的 href 设置为 Struts 转发。
(2)访问 $book title 属性。
(3)访问 $book isbn 属性。
(4)再次访问 $book title 属性。
(5)访问 $book author 属性。
(6)访问 $book price 属性。
(7)访问 $book pages 属性。
(8)访问 $book description 属性。
(9)访问 $book publisher 属性。
讨论
这就是把 Struts 与 Velocity 模板引擎集成的全部工作。表面看起来非常简单(实际上也很简单),但是请想想是什么让这个集成能够工作的呢?
Struts 动作映射可以定义任何视图,不仅限于 JSP。在这篇文章中,我只是把动作映射修改为以 vm 结尾而不是以 jsp 结尾的返回文件。然后,我声明了 Velocity servlet,并告诉 Servlet 容器把以 vm 结尾的文件发送给 VelocityViewServlet。
VelocityViewServlet 把 Velocity 命令表示成 HTML 响应。通过这种方式,VelocityViewServlet 充当了视图响应的拦截器。Struts 控制器把视图转发给 VelocityViewServlet,后者在向客户端发送响应之前处理 vm 文件。请参阅参考资料 获得关于将 Velocity 视图集成进 Struts 应用程序的更多内容。
结束语
正如在本文中看到的,Struts 与 Velocity 的集成很简单。只需五个步骤就可以把所有东西连在一起。针对不同的引擎和场景,采用模板引擎而不是 JSP 的优势各有不同。在 Velocity 的情况下,优势就是简单性、容易学习以及更好的性能。
分享到:
相关推荐
【Velocity语法以及整合struts2总结】 Velocity是一个开源的Java模板引擎,它是Apache软件基金会的Jakarta项目的一部分。Velocity将HTML代码与业务逻辑分离,使得开发者可以专注于内容和设计,而不用关心数据如何...
总的来说,这个实例提供了一个基础的框架,可以帮助开发者了解和实践如何将Struts2的业务逻辑与Velocity的视图呈现相结合,以创建高效、可扩展的Java Web应用程序。通过对这两个框架的深入理解和合理利用,开发者...
本项目“使用了Struts结构和Velocity模板技术的BLOG”旨在演示如何结合这两种技术来创建一个功能完善的博客系统。 **Struts框架** Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架。它为...
Velocity和Struts结合使用,能够高效地生成HTML页面,实现动态内容的展示,尤其适合于复杂的Web应用。这种架构模式有助于提高代码的可维护性和可扩展性,使得开发者可以更好地关注业务逻辑,而不是页面的生成。通过...
在实际开发中,Struts2 通常与 Velocity 结合使用,Struts2 负责业务逻辑和请求处理,Velocity 负责生成动态内容。通过将 Velocity 模板嵌入到 Struts2 的结果中,可以构建出灵活且易于维护的Web应用。在提供的...
Struts2与Velocity结合使用,可以实现更高效、更灵活的视图层渲染。 在Struts2框架中,Velocity被用作视图技术,因为它的语法简洁,学习曲线平缓,且能够方便地将数据绑定到模板中。Velocity模板语言(VTL)允许...
Velocity是一个基于Java的模板引擎,它将控制逻辑与表现逻辑分离,使得开发者可以专注于内容的呈现,而Struts2则是一个强大的MVC(模型-视图-控制器)框架,提供了丰富的功能来处理HTTP请求和业务逻辑。这两个框架的...
在结合Struts2和Velocity时,通常会在Struts2的Action中处理业务逻辑,并将结果对象放入到Value Stack或Session中,然后配置一个Struts2的Result类型为“velocity”,指定对应的Velocity模板文件。当Action执行完成...
在Struts2与Velocity整合的例子中,可能会用到预处理或后处理的拦截器。 6. **Action与视图的通信**:Struts2使用ValueStack管理Action上下文中的对象,这些对象可以直接在Velocity模板中通过OGNL表达式访问。例如...
在这个"struts2+spring+velocity扩展实例V1版本"中,我们可以看到这三个框架的集成与应用。 首先,Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它的主要职责是处理用户的请求,并将其...
- 访问`http://yourserver/yourapp/yourAction`,Struts2会根据配置将请求转发给相应的Action,Action执行后返回的数据将与Velocity模板结合,生成最终的HTML响应。 7. **优势与应用**: - Struts2提供了强大的...
在Struts2与Velocity结合使用时,通常会将Velocity模板作为Action执行后的Result,这样Action处理完业务逻辑后,会将控制权交给Velocity模板来生成最终的HTML响应。开发者可以利用Struts2的Action和Interceptor来...
本实例以"Maven构建spring struts2 ibatis velocity小实例"为主题,将详细介绍这四者的整合过程,帮助开发者快速理解和应用这些技术。 首先,Maven是Java项目管理工具,它负责项目的构建、依赖管理和项目信息管理。...
当Struts2和Velocity结合使用时,通常会将Velocity作为视图层技术,处理Struts2 Action返回的数据显示。在Struts2配置文件中,可以指定一个Action的结果类型为"velocity",然后提供对应的Velocity模板文件路径。这样...
在运行时,Velocity会将模板与数据模型结合,生成最终的HTML输出。这种方式有利于保持视图层的整洁,提高代码的可读性和可维护性。 总结来说,"mongo集成spring struts2 json velocity"这个项目展示了如何在Java ...
在Struts框架中结合Velocity模版,可以更方便地处理页面展示,提高开发效率。 首先,我们来看`struts_vsl.ct`,这个文件可能是整个应用的主模版文件,它可能包含了整个页面的布局和公共部分,如头部、尾部和导航栏...
在本教程中,我们将详细介绍如何在Struts2和Velocity框架下利用EasyUI的Combobox组件实现下拉列表,避免繁琐的SELECT OPTIONS代码编写,提升开发效率。 Combobox是EasyUI中的一个组件,它将输入框和下拉列表结合在...
本文将详细介绍如何在 Struts2 框架中利用 JavaScript(JS)进行客户端表单验证,并结合实际代码示例来解释具体的实现方式。 #### 一、基本概念 Struts2 是一个基于 Java 的企业级应用框架,它支持多种技术栈,...
【Velocity+Struts+Jdbc+Mysql】是一个...通过以上介绍,我们可以看到Velocity、Struts、JDBC和MySQL如何协同工作,构建出高效、可维护的Java Web应用。学习和掌握这些技术,对于提升Java Web开发能力是非常有帮助的。
在ESHop中,Velocity模板将负责生成动态HTML页面,通过与Struts2的Action结果相结合,根据用户请求呈现不同的界面内容。 在构建网络商店的过程中,你将学到以下核心知识点: 1. **Struts2框架**:了解Action类、...