﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-缘来如此-随笔分类-Velocity</title><link>http://www.blogjava.net/supperchen/category/30052.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 13 Mar 2008 13:03:35 GMT</lastBuildDate><pubDate>Thu, 13 Mar 2008 13:03:35 GMT</pubDate><ttl>60</ttl><item><title>Velocity中使用Struts的国际化文件 </title><link>http://www.blogjava.net/supperchen/archive/2007/11/02/157791.html</link><dc:creator>缘来如此</dc:creator><author>缘来如此</author><pubDate>Fri, 02 Nov 2007 09:08:00 GMT</pubDate><guid>http://www.blogjava.net/supperchen/archive/2007/11/02/157791.html</guid><wfw:comment>http://www.blogjava.net/supperchen/comments/157791.html</wfw:comment><comments>http://www.blogjava.net/supperchen/archive/2007/11/02/157791.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supperchen/comments/commentRss/157791.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supperchen/services/trackbacks/157791.html</trackback:ping><description><![CDATA[当利用Velocity和Struts一同开发web应用时，可能会遇到这样的问题，即.vm文件中无法使用Struts的标签。虽然Velocity的模板引擎以及它强大的语句可以使我们毫不犹豫地抛弃Struts的标签，但有时候，我们仍然需要在.vm文件中引用Struts的国际化文件ApplicationResources.properties，能否做到呢？答案是肯定的。替代的办法是使用toolbox.xml（关于toolbox.xml的配置请参照<a href="http://www.junesky.org/blog/article.asp?id=144" target="_blank">http://www.junesky.org/blog/article.asp?id=144</a>），以下是一个toobox.xml文件：
<div class="UBBPanel"> 程序代码&lt;?xml version="1.0"?&gt;<br />
&lt;toolbox&gt;<br />
  &lt;tool&gt;<br />
     &lt;key&gt;link&lt;/key&gt;<br />
     &lt;scope&gt;request&lt;/scope&gt;<br />
     &lt;class&gt;<br />
       org.apache.velocity.tools.struts.StrutsLinkTool<br />
     &lt;/class&gt;<br />
  &lt;/tool&gt;<br />
  &lt;tool&gt;<br />
     &lt;key&gt;msg&lt;/key&gt;<br />
     &lt;scope&gt;request&lt;/scope&gt;<br />
     &lt;class&gt;<br />
       org.apache.velocity.tools.struts.MessageTool<br />
     &lt;/class&gt;<br />
  &lt;/tool&gt;<br />
  &lt;tool&gt;<br />
     &lt;key&gt;errors&lt;/key&gt;<br />
     &lt;scope&gt;request&lt;/scope&gt;<br />
     &lt;class&gt;<br />
       org.apache.velocity.tools.struts.ErrorsTool<br />
     &lt;/class&gt;<br />
  &lt;/tool&gt;<br />
  &lt;tool&gt;<br />
     &lt;key&gt;form&lt;/key&gt;<br />
     &lt;scope&gt;request&lt;/scope&gt;<br />
     &lt;class&gt;<br />
       org.apache.velocity.tools.struts.FormTool<br />
     &lt;/class&gt;<br />
  &lt;/tool&gt;<br />
  &lt;tool&gt;<br />
     &lt;key&gt;tiles&lt;/key&gt;<br />
     &lt;scope&gt;request&lt;/scope&gt;<br />
     &lt;class&gt;<br />
       org.apache.velocity.tools.struts.TilesTool<br />
     &lt;/class&gt;<br />
  &lt;/tool&gt;<br />
  &lt;tool&gt;<br />
     &lt;key&gt;validator&lt;/key&gt;<br />
     &lt;scope&gt;request&lt;/scope&gt;<br />
     &lt;class&gt;<br />
       org.apache.velocity.tools.struts.ValidatorTool<br />
     &lt;/class&gt;<br />
  &lt;/tool&gt;<br />
&lt;/toolbox&gt;StrutsLinkTool：针对 Struts 的 LinkTool 专用版本，提供了 setAction() 和 setForward() 访问预先配置的活动映射。<br />
MessageTool：提供对 Struts 国际化支持的访问，尤为特别的是依赖于语言的消息资源。<br />
ErrorsTool：处理 Struts 错误消息，包括对国际化的支持。<br />
FormTool：访问 Struts 的表单 beans。<br />
TilesTool：提供对 Struts 1.1 Tiles 扩展支持的访问。<br />
ValidatorTool：提供对 Struts 1.1 Validator 扩展的访问，生成代码验证表单输入字段。<br /><br />
现在，我们有一个编译好了的文件：ApplicationResources_zh_CN.properties。它的内容如下：<br />
name=六月天<br /><br />
在.vm文件中，就可以这样写：<br />
$!{msg.get(“name”)}<br /></div><img src ="http://www.blogjava.net/supperchen/aggbug/157791.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supperchen/" target="_blank">缘来如此</a> 2007-11-02 17:08 <a href="http://www.blogjava.net/supperchen/archive/2007/11/02/157791.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>更好的理解struts+velocity</title><link>http://www.blogjava.net/supperchen/archive/2007/11/02/157789.html</link><dc:creator>缘来如此</dc:creator><author>缘来如此</author><pubDate>Fri, 02 Nov 2007 09:04:00 GMT</pubDate><guid>http://www.blogjava.net/supperchen/archive/2007/11/02/157789.html</guid><wfw:comment>http://www.blogjava.net/supperchen/comments/157789.html</wfw:comment><comments>http://www.blogjava.net/supperchen/archive/2007/11/02/157789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supperchen/comments/commentRss/157789.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supperchen/services/trackbacks/157789.html</trackback:ping><description><![CDATA[
		<img src="http://s10.album.sina.com.cn/pic_3/4bcc2b1502001cex" _extended="true" alt="" border="0" width="500" />
<img src ="http://www.blogjava.net/supperchen/aggbug/157789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supperchen/" target="_blank">缘来如此</a> 2007-11-02 17:04 <a href="http://www.blogjava.net/supperchen/archive/2007/11/02/157789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts与Velocity集成 五个步骤替代JSP</title><link>http://www.blogjava.net/supperchen/archive/2007/11/02/157787.html</link><dc:creator>缘来如此</dc:creator><author>缘来如此</author><pubDate>Fri, 02 Nov 2007 09:02:00 GMT</pubDate><guid>http://www.blogjava.net/supperchen/archive/2007/11/02/157787.html</guid><wfw:comment>http://www.blogjava.net/supperchen/comments/157787.html</wfw:comment><comments>http://www.blogjava.net/supperchen/archive/2007/11/02/157787.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/supperchen/comments/commentRss/157787.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/supperchen/services/trackbacks/157787.html</trackback:ping><description><![CDATA[Struts Recipes 的合著者 George Franciscus 带您一步步地把 Velocity 模板引擎集成进 Struts 应用程序。结果是一个快速、灵活的 <a href="http://www.yarkoo.com/" target="_blank">JSP</a> 替代物，同时带有希望从 Struts 得到的所有方便。<br />
　　<br />
　　Java? 服务器页面（<a href="http://www.yarkoo.com/" target="_blank">JSP</a>）技术是如此普及，以至于人们忘记了在创建 Web 页面时还有其他选择。但是最近，有些开发人员已经转向模板引擎，以获得在 <a href="http://www.yarkoo.com/" target="_blank">JSP</a> 中得不到的灵活性。虽然用 <a href="http://www.yarkoo.com/" target="_blank">JSP</a> 和模板引擎都可以把数据嵌入 HTML，但是每种技术都有自己的处理方式。Velocity 模板是一个特别流行的 <a href="http://www.yarkoo.com/" target="_blank">JSP</a> 替代品。Velocity 提供了平缓的学习曲线和巨大的易用性。开发人员喜欢它简洁的语法，而且性能分析也证明它的性能超出 JSP。Velocity 也非常容易集成进 Struts 应用程序。<br />
　　<br />
　　在这篇文章中，我将介绍如何在 Struts 应用程序中集成和使用 Velocity 模板引擎。我会首先提供一个公式，然后逐步展开它。生成的应用程序组合了 Struts 和 Velocity ?? 一个第一流的组合，可能会让您怀疑自己对 JSP 的忠诚！<br />
　　<br />
　　在开始之前下载这篇文章的源代码，以及 Struts、Velocity 和 Velocity 工具包。请注意，本文假设您熟悉使用 Struts 框架进行 MVC 编程。<br />
　　<br />
　　<strong>关于模板引擎</strong><br />
　　<br />
　　在开始集成 Struts 和 Velocity 的简单任务之前，让我们先确保您理解模板引擎和它们在视图生成中的角色。模板引擎作为整体概念，Velocity 作为具体实现，它们的生命在 HTML 之外。Velocity 把数据合并到文本主体中不同的点上。文本可以是文字、电子邮件或 HTML。由于采用这种方式，Velocity 模板引擎有点儿像 Microsoft Word 的“邮件合并”特性。邮件合并允许您方便地把动态数据（例如姓名、地址和电话号码）合并到信件中。在早期的日子里，组织用这项特性生成大型邮件列表并把它们送到邮局，导致垃圾邮件的产生！<br />
　　<br />
　　<strong>Velocity 是什么？</strong><br />
　　<br />
　　Velocity 是一个基于 Java 的模板引擎，它提供了简单的基于模板的语言，可以用类似脚本的方式引用对象。Velocity 促进了分离团队成员之间的责任：允许 Web 设计人员专注于视图（即页面的观感），而 Java 程序员专注于后端代码。把 Java 代码从页面布局中分离出来，会让 Web 应用程序未来更易维护。当 Velocity 与 Sruts 这样的 MVC 框架结合时，就成了 JSP 或 PHP 可行的替代。<br />
　　<br />
　　在 Web 应用程序中，Velocity 实现的目标与 JSP 相同：可以用它在向 HttpServletResponse 的 OutputStream 发送之前生成要发送的 HTML。在 Struts 应用程序中使用 Velocity 的一种方式是在 Struts 的 Action 内部写入响应，然后返回 null 的 ActionForward。虽然这种技术可行，但却有严重的缺陷：无法使用 struts-config.xml 文件把响应抽象出来。把视图放在 Action 内部，意味着如果想要修改响应，就必须修改 Action。<br />
　　<br />
　　因为这种技术剥夺了 Struts 最好的一项特性（即从视图中抽象出重点的能力），所以我更愿意把所有响应指向一个 servlet，由它负责访问 Velocity 模板，合并上下文的数据，生成响应，然后再送回浏览器。稍后就会学到，Velocity 的设计者们已经把这些步骤全都捆绑在了一起：您需要做的只是跟着我来看如何一步步地实现它们。如果您还没有访问“下载”一节，现在是访问的时候了。<br />
　　<br />
　　<strong>Velocity 的五步</strong><br />
　　<br />
　　把 Struts 与 Velocity 模板引擎组合起来很简单，也很直接；实际上，只要用五步就可以实现：<br />
　　<br />
　　1.　　把 Velocity JAR 放在类路径中。<br />
　　<br />
　　2.　　修改 web.xml 文件让它识别 Velocity servlet。<br />
　　<br />
　　3.　　把 Velocity toolbox.xml 放在应用程序的 WEB-INF 目录下。<br />
　　<br />
　　4.　　修改 struts-config，把它的视图指向 Velocity 模板而不是 JSP。<br />
　　<br />
　　5.　　为每个需要显示的页面创建 Velocity 模板。<br />
　　<br />
　　我将用一个熟悉的搜索用例来演示 Struts 与 Velocity 的集成。在这个示例中，一个简单的应用程序允许用户按照图书的 ISBN 编号搜索图书。应用程序的结果页面显示与 ISBN 编号匹配的图书。<br />
　　<br />
　　第 1 步：把 Velocity JAR 放在 WEB-INF/lib 下<br />
　　<br />
　　<strong>放弃 Struts 标记 ?? 不！</strong><br />
　　<br />
　　现在，您可能会想，是不是需要放弃那些过去让您节约了许多编码时间的很好的 Struts 标记。如果不使用 JSP，那么肯定没有使用 Struts 的 JSP 标记！幸运的是，您可以使用 Velocity 工具。Velocity 的 Struts 工具提供了所有您熟悉的 Struts 方便特性，但是添加了 Velocity 的灵活性。<br />
　　<br />
　　如果您还没下载 Velocity，那么现在需要下载它。Velocity 本身是很棒的，但是它的工具包可以帮助您把工作做得更好更快。特别是 Struts 工具模拟了您以前熟悉的 Struts 标记。请参阅 下载 一节下载 Velocity 模板引擎和 Velocity 工具。<br />
　　<br />
　　请注意不同时候，需要的 jar 也会略有不同。在这里我不想列出一个 JAR 列表，只是想建议您访问 Velocity 的主页（请参阅参考资料）并阅读那里的安装指南。一旦得到了需要的 JAR，只需把它们放在 WEB-INF\lib 下面即可。<br />
　　<br />
　　第 2 步：修改 web.xml，让它识别 Velocity 的 servlet<br />
　　<br />
　　下一步是修改 Struts 的 web.xml 文件，让它识别 Velocity 的 servlet 并把所有以 .vm 结尾的资源请求定向到 Velocity servlet，如清单 1 所示。<br />
　　<br />
　　清单 1. 修改 web.xml，声明 Velocity servlet<br />
　　<br />
　　&lt;servlet&gt;<br />
　　&lt;servlet-name&gt;velocity&lt;/servlet-name&gt; |(1)<br />
　　&lt;servlet-class&gt; |(2)<br />
　　org.apache.velocity.tools.view.servlet.VelocityViewServlet<br />
　　&lt;/servlet-class&gt;<br />
　　<br />
　　&lt;init-param&gt; |(3)<br />
　　&lt;param-name&gt;org.apache.velocity.toolbox&lt;/param-name&gt;<br />
　　&lt;param-value&gt;/WEB-INFtoolbox.xml&lt;/param-value&gt;<br />
　　&lt;/init-param&gt;<br />
　　<br />
　　&lt;load-on-startup&gt;10&lt;/load-on-startup&gt; |(4)<br />
　　&lt;/servlet&gt;<br />
　　<br />
　　&lt;!-- Map *.vm files to Velocity --&gt;<br />
　　&lt;servlet-mapping&gt; |(5)<br />
　　&lt;servlet-name&gt;velocity&lt;/servlet-name&gt;<br />
　　&lt;url-pattern&gt;*.vm&lt;/url-pattern&gt;<br />
　　&lt;/servlet-mapping&gt;<br />
　　<br />
　　让我们来看看清单 1 中发生了什么：<br />
　　<br />
　　（1）声明了 Velocity servlet 并给了它一个 velocity 句柄。<br />
　　<br />
　　（2）声明了 Velocity servlet 的类名。<br />
　　<br />
　　Velocity servlet 接受“toolbox”参数。toolbox 是声明应用程序的可用工具的位置。因此，在清单 1 中，我还做了以下工作：<br />
　　<br />
　　（3）告诉 VelocityServlet 在哪里可以找到 toolbox 的配置。<br />
　　<br />
　　（4）设置了 load-on-startup 标记，确保在正确的时间装入 Velocity servlet。任何大于或等于 0 的值都会迫使容器通过调用 servlet 的 init() 方法来装入它。放在 load-on-startup 标记体中的值决定了不同的 servlet 的 init 方法调用的次序。例如，0 在 1 之前调用，而 1 在 2 之前调用。缺少的标记或负值允许 servlet 容器根据自己的选择装入 servlet。<br />
　　<br />
　　（5）声明了 servlet 映射，强迫所有用 .vm 结尾的资源请求定向到 Velocity servlet。请注意（5）中的&lt;servlet-name&gt; 必须与（1）中的&lt;servlet-name&gt; 匹配。交错的声明和映射会在日志中生成错误。<br />
　　<br />
　　第 3 步：把 toolbox.xml 放在 WEB-INF 下<br />
　　<br />
　　利用 Velocity，可以使用（或创建）包含许多工具的工具箱。用来登记类的工具箱中包含有用的函数，常常会用到。幸运的是，Velocity 提供了许多预先构建好的工具。还创建了许多 Struts 工具来模拟原始的 Struts 标记。如果发现需要构建自己的工具，也可以自由地构建。在清单 2 中显示的 toolbox.xml 可以在 Velocity 工具下载中找到。这个文件应当随 Velocity JAR 一起放在 WEB-INF 下。<br />
　　<br />
　　清单 2. toolbox.xml<br />
　　<br />
　　&lt;?xml version="1.0"?&gt;<br />
　　&lt;toolbox&gt;<br />
　　&lt;tool&gt;<br />
　　&lt;key&gt;link&lt;/key&gt;<br />
　　&lt;scope&gt;request&lt;/scope&gt;<br />
　　&lt;class&gt;<br />
　　org.apache.velocity.tools.struts.StrutsLinkTool<br />
　　&lt;/class&gt;<br />
　　&lt;/tool&gt;<br />
　　&lt;tool&gt;<br />
　　&lt;key&gt;msg&lt;/key&gt;<br />
　　&lt;scope&gt;request&lt;/scope&gt;<br />
　　&lt;class&gt;<br />
　　org.apache.velocity.tools.struts.MessageTool<br />
　　&lt;/class&gt;<br />
　　&lt;/tool&gt;<br />
　　&lt;tool&gt;<br />
　　&lt;key&gt;errors&lt;/key&gt;<br />
　　&lt;scope&gt;request&lt;/scope&gt;<br />
　　&lt;class&gt;<br />
　　org.apache.velocity.tools.struts.ErrorsTool<br />
　　&lt;/class&gt;<br />
　　&lt;/tool&gt;<br />
　　&lt;tool&gt;<br />
　　&lt;key&gt;form&lt;/key&gt;<br />
　　&lt;scope&gt;request&lt;/scope&gt;<br />
　　&lt;class&gt;<br />
　　org.apache.velocity.tools.struts.FormTool<br />
　　&lt;/class&gt;<br />
　　&lt;/tool&gt;<br />
　　&lt;tool&gt;<br />
　　&lt;key&gt;tiles&lt;/key&gt;<br />
　　&lt;scope&gt;request&lt;/scope&gt;<br />
　　&lt;class&gt;<br />
　　org.apache.velocity.tools.struts.TilesTool<br />
　　&lt;/class&gt;<br />
　　&lt;/tool&gt;<br />
　　&lt;tool&gt;<br />
　　&lt;key&gt;validator&lt;/key&gt;<br />
　　&lt;scope&gt;request&lt;/scope&gt;<br />
　　&lt;class&gt;<br />
　　org.apache.velocity.tools.struts.ValidatorTool<br />
　　&lt;/class&gt;<br />
　　&lt;/tool&gt;<br />
　　&lt;/toolbox&gt;<br />
　　<br />
　　第 4 步：修改 struts-config<br />
　　<br />
　　下一步是修改 struts-config.xml，指向 Velocity 视图而不是 JSP。新的配置文件如清单 3 所示。<br />
　　<br />
　　清单 3. 针对 Velocity 视图修改后的 struts-config.xml<br />
　　<br />
　　&lt;?xml version="1.0" encoding="ISO-8859-1" ?&gt;<br />
　　<br />
　　&lt;!DOCTYPE struts-config PUBLIC<br />
　　"-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"<br />
　　"http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd"&gt;<br />
　　<br />
　　&lt;struts-config&gt;<br />
　　&lt;form-beans&gt;<br />
　　&lt;form-bean name="searchForm" type="app.SearchForm"/&gt;<br />
　　&lt;/form-beans&gt;<br />
　　<br />
　　&lt;global-forwards&gt;<br />
　　&lt;forward name="welcome" path="/welcome.do"/&gt;<br />
　　&lt;/global-forwards&gt;<br />
　　<br />
　　&lt;action-mappings&gt;<br />
　　&lt;action<br />
　　path="/welcome"<br />
　　type="org.apache.struts.actions.ForwardAction"<br />
　　parameter="/pages/search.vm"/&gt; |(1)<br />
　　<br />
　　&lt;action<br />
　　path="/search"<br />
　　type="app.SearchAction"<br />
　　name="searchForm"<br />
　　scope="request"<br />
　　input="/pages/search.vm"&gt; |(2)<br />
　　&lt;forward name="success"<br />
　　path="/pages/results.vm"/&gt; |(3)<br />
　　&lt;/action&gt;<br />
　　&lt;/action-mappings&gt;<br />
　　&lt;/struts-config&gt;<br />
　　<br />
　　清单 3 看起来就像一个非常典型的 Struts 应用程序，只有一个小小的不同。响应没有把客户转向到 JSP，而直接转向到 .vm 文件（请参阅清单 3 中的引用 1、2 和 3）。在大多数情况下，把 Struts 应用程序从 JSP 迁移到 Velocity 视图，需要做的仅仅是全局搜索，把 .jsp 替换成 .vm。其他所有东西都可以保持不变！模板可以同样保存在以前保存 JSP 的位置；所需要做的只是用 Velocity 命令代替 JSP 标记。<br />
　　<br />
　　第 5 步：创建 Velocity 模板<br />
　　<br />
　　在清单 4 中，可以看到示例应用程序搜索页面的 Velocity 模板。<br />
　　<br />
　　清单 4. 搜索页面的 Velocity 模板<br />
　　<br />
　　&lt;HTML&gt;<br />
　　&lt;HEAD&gt;<br />
　　&lt;TITLE&gt;Search&lt;/TITLE&gt;<br />
　　&lt;/HEAD&gt;<br />
　　&lt;BODY&gt;<br />
　　$!errors.msgs()||(1)<br />
　　&lt;FORM method="POST"<br />
　　action="$link.setAction('/search')"&gt; |(2)<br />
　　&lt;h2&gt;Book Search&lt;/h2&gt;<br />
　　ISBN:&lt;INPUT type="text" name="isbn"&gt;<br />
　　&lt;INPUT type="submit" value="Submit" name="submit"&gt;<br />
　　&lt;/FORM&gt;<br />
　　&lt;/BODY&gt;<br />
　　&lt;/HTML&gt;<br />
　　<br />
　　清单 4 是一个没有 JSP 或 Struts 标记的典型的 HTML 页面。但是，以下元素看起来可能不是那么熟悉：<br />
　　<br />
　　（1）用 $!errors.msgs() 得到错误消息队列中的错误消息。<br />
　　<br />
　　（2）用 $link.setAction('/search') 获得搜索转发的 URL。<br />
　　<br />
　　这就成功了 ?? 模板剩下的部分看起来几乎与以前熟悉的 HTML 文件相同。清单 5 显示了应用程序结果页面的模板。<br />
　　<br />
　　清单 5. 结果页面的 Velocity 模板<br />
　　<br />
　　&lt;html&gt;<br />
　　&lt;body&gt;<br />
　　<br />
　　&lt;h1&gt;Book Details&lt;/h1&gt;<br />
　　&lt;a href="$link.setForward("searchEntry")"&gt;Search again&lt;/a&gt; |(1)<br />
　　<br />
　　&lt;h3&gt;$book.title&lt;/h3&gt; |(2)<br />
　　<br />
　　&lt;b&gt;ISBN:&lt;/b&gt;$book.isbn&lt;br&gt;|(3)<br />
　　&lt;b&gt;Title:&lt;/b&gt;$book.title&lt;br&gt;|(4)<br />
　　&lt;b&gt;Author:&lt;/b&gt;$book.author&lt;br&gt;|(5)<br />
　　&lt;b&gt;Price:&lt;/b&gt;$book.price&lt;br&gt;|(6)<br />
　　&lt;b&gt;No Pages:&lt;/b&gt;$book.pages&lt;br&gt;|(7)<br />
　　&lt;b&gt;Description:&lt;/b&gt;$book.description&lt;br&gt;|(8)<br />
　　&lt;b&gt;Publisher:&lt;/b&gt;$book.publisher&lt;br&gt;|(9)<br />
　　&lt;/body&gt;<br />
　　&lt;html&gt;<br />
　　<br />
　　可以注意到，清单 5 中不包含 JSP 标记或 Struts 标记。我们来详细看看它：<br />
　　<br />
　　（1）用 Struts 的链接工具把 &lt;a&gt; 标记的 href 设置为 Struts 转发。<br />
　　<br />
　　（2）访问 $book title 属性。<br />
　　<br />
　　（3）访问 $book isbn 属性。<br />
　　<br />
　　（4）再次访问 $book title 属性。<br />
　　<br />
　　（5）访问 $book author 属性。<br />
　　<br />
　　（6）访问 $book price 属性。<br />
　　<br />
　　（7）访问 $book pages 属性。<br />
　　<br />
　　（8）访问 $book description 属性。<br />
　　<br />
　　（9）访问 $book publisher 属性。<br />
　　<br />
　　<strong>讨论</strong><br />
　　<br />
　　这就是把 Struts 与 Velocity 模板引擎集成的全部工作。表面看起来非常简单（实际上也很简单），但是请想想是什么让这个集成能够工作的呢？<br />
　　<br />
　　Struts 动作映射可以定义任何视图，不仅限于 JSP。在这篇文章中，我只是把动作映射修改为以 vm 结尾而不是以 jsp 结尾的返回文件。然后，我声明了 Velocity servlet，并告诉 Servlet 容器把以 vm 结尾的文件发送给 VelocityViewServlet。<br />
　　<br />
　　VelocityViewServlet 把 Velocity 命令表示成 HTML 响应。通过这种方式，VelocityViewServlet 充当了视图响应的拦截器。Struts 控制器把视图转发给 VelocityViewServlet，后者在向客户端发送响应之前处理 vm 文件。请参阅参考资料 获得关于将 Velocity 视图集成进 Struts 应用程序的更多内容。<br />
　　<br />
　　<strong>结束语</strong><br />
　　<br />
　　正如在本文中看到的，Struts 与 Velocity 的集成很简单。只需五个步骤就可以把所有东西连在一起。针对不同的引擎和场景，采用模板引擎而不是 JSP 的优势各有不同。在 Velocity 的情况下，优势就是简单性、容易学习以及更好的性能。
<div class="invisible" id="reference">文章引用自：<a href="" target=" href_cetemp=" ?=""></a></div><img src ="http://www.blogjava.net/supperchen/aggbug/157787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/supperchen/" target="_blank">缘来如此</a> 2007-11-02 17:02 <a href="http://www.blogjava.net/supperchen/archive/2007/11/02/157787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>