- 浏览: 1884540 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (514)
- OPEN (41)
- WARN (33)
- EXPER (16)
- RESOURCE (7)
- TOOL (4)
- DWR (10)
- Struts1.x (10)
- Ibtais (18)
- MyEclipse (30)
- Sql Server (64)
- Tomcat (7)
- APACHE (4)
- JSP (18)
- SERVLET (6)
- ENGLISH (0)
- ECSide (8)
- JasperReports (7)
- JAVA (24)
- JS (42)
- XML (26)
- CVS (8)
- Mind (1)
- JQUERY (2)
- IBATIS (6)
- PROJECT (0)
- STRUTS2 (0)
- PROXOOL (0)
- SPRING (4)
- Hibernate (0)
- SSI (0)
- JBPM (11)
- FLEX (3)
- JSON (2)
- GWT (1)
- jeecms v3 (1)
- Flash (2)
- DATA (1)
- ORACLE (3)
- 查询oracle 中逗号分隔字符串中所有值 (1)
最新评论
-
小小西芹菜:
GoEasy web三步轻松实现web实时推送1. 引入goe ...
服务器推送技术 java -
kg_1997:
这个方法太棒了,可以不用to_date函数,实在是棒!!!
java/oracle日期处理 -
wodesunday:
:idea:
SQL的分段统计查询语句 -
wodesunday:
引用
SQL的分段统计查询语句 -
BlueSkator:
讲的有点浅,没有深入进去
tomcat需要的重新发布和重启服务器的几种情况
Java™ 服务器页面(JSP)技术是如此普及,以至于人们忘记了在创建 Web 页面时还有其他选择。但是最近,有些开发人员已经转向模板引擎,以获得在 JSP 中得不到的灵活性。虽然用 JSP 和模板引擎都可以把数据嵌入 HTML,但是每种技术都有自己的处理方式。Velocity 模板是一个特别流行的 JSP 替代品。Velocity 提供了平缓的学习曲线和巨大的易用性。开发人员喜欢它简洁的语法,而且性能分析也证明它的性能超出 JSP。Velocity 也非常容易集成进 Struts 应用程序。
在这篇文章中,我将介绍如何在 Struts 应用程序中集成和使用 Velocity 模板引擎。我会首先提供一个公式,然后逐步展开它。生成的应用程序组合了 Struts 和 Velocity —— 一个第一流的组合,可能会让您怀疑自己对 JSP 的忠诚!
请参阅 下载 一节,在开始之前下载这篇文章的源代码,以及 Struts、Velocity 和 Velocity 工具包。请注意,本文假设您熟悉使用 Struts 框架进行 MVC 编程。
关于模板引擎
在开始集成 Struts 和 Velocity 的简单任务之前,让我们先确保您理解模板引擎和它们在视图生成中的角色。模板引擎作为整体概念,Velocity 作为具体实现,它们的生命在 HTML 之外。Velocity 把数据合并到文本主体中不同的点上。文本可以是文字、电子邮件或 HTML。由于采用这种方式,Velocity 模板引擎有点儿像 Microsoft Word 的“邮件合并”特性。邮件合并允许您方便地把动态数据(例如姓名、地址和电话号码)合并到信件中。在早期的日子里,组织用这项特性生成大型邮件列表并把它们送到邮局,导致垃圾邮件的产生!
Velocity 是什么?Velocity 是一个基于 Java 的模板引擎,它提供了简单的基于模板的语言,可以用类似脚本的方式引用对象。Velocity 促进了分离团队成员之间的责任:允许 Web 设计人员专注于视图(即页面的观感),而 Java 程序员专注于后端代码。把 Java 代码从页面布局中分离出来,会让 Web 应用程序未来更易维护。当 Velocity 与 Sruts 这样的 MVC 框架结合时,就成了 JSP 或 PHP 可行的替代。
在 Web 应用程序中,Velocity 实现的目标与 JSP 相同:可以用它在向 HttpServletResponse 的 OutputStream 发送之前生成要发送的 HTML。在 Struts 应用程序中使用 Velocity 的一种方式是在 Struts 的 Action 内部写入响应,然后返回 null 的 ActionForward。虽然这种技术可行,但却有严重的缺陷:无法使用 struts-config.xml 文件把响应抽象出来。把视图放在 Action 内部,意味着如果想要修改响应,就必须修改 Action。
因为这种技术剥夺了 Struts 最好的一项特性(即从视图中抽象出重点的能力),所以我更愿意把所有响应指向一个 servlet,由它负责访问 Velocity 模板,合并上下文的数据,生成响应,然后再送回浏览器。稍后就会学到,Velocity 的设计者们已经把这些步骤全都捆绑在了一起:您需要做的只是跟着我来看如何一步步地实现它们。如果您还没有 访问“下载”一节,现在是访问的时候了。
--------------------------------------------------------------------------------
回页首
Velocity 的五步
把 Struts 与 Velocity 模板引擎组合起来很简单,也很直接;实际上,只要用五步就可以实现:
把 Velocity JAR 放在类路径中。
修改 web.xml 文件让它识别 Velocity servlet。
把 Velocity toolbox.xml 放在应用程序的 WEB-INF 目录下。
修改 struts-config,把它的视图指向 Velocity 模板而不是 JSP。
为每个需要显示的页面创建 Velocity 模板。
我将用一个熟悉的搜索用例来演示 Struts 与 Velocity 的集成。在这个示例中,一个简单的应用程序允许用户按照图书的 ISBN 编号搜索图书。应用程序的结果页面显示与 ISBN 编号匹配的图书。
放弃 Struts 标记 —— 不!现在,您可能会想,是不是需要放弃那些过去让您节约了许多编码时间的很好的 Struts 标记。如果不使用 JSP,那么肯定没有使用 Struts 的 JSP 标记!幸运的是,您可以使用 Velocity 工具。Velocity 的 Struts 工具提供了所有您熟悉的 Struts 方便特性,但是添加了 Velocity 的灵活性。
第 1 步:把 Velocity JAR 放在 WEB-INF/lib 下
如果您还没下载 Velocity,那么现在需要下载它。Velocity 本身是很棒的,但是它的工具包可以帮助您把工作做得更好更快。特别是 Struts 工具模拟了您以前熟悉的 Struts 标记。请参阅 下载 一节下载 Velocity 模板引擎和 Velocity 工具。
请注意不同时候,需要的 jar 也会略有不同。在这里我不想列出一个 JAR 列表,只是想建议您访问 Velocity 的主页(请参阅 参考资料)并阅读那里的安装指南。一旦得到了需要的 JAR,只需把它们放在 WEB-INF\lib 下面即可。
第 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-INF/toolbox.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 的情况下,优势就是简单性、容易学习以及更好的性能。
在这篇文章中,我将介绍如何在 Struts 应用程序中集成和使用 Velocity 模板引擎。我会首先提供一个公式,然后逐步展开它。生成的应用程序组合了 Struts 和 Velocity —— 一个第一流的组合,可能会让您怀疑自己对 JSP 的忠诚!
请参阅 下载 一节,在开始之前下载这篇文章的源代码,以及 Struts、Velocity 和 Velocity 工具包。请注意,本文假设您熟悉使用 Struts 框架进行 MVC 编程。
关于模板引擎
在开始集成 Struts 和 Velocity 的简单任务之前,让我们先确保您理解模板引擎和它们在视图生成中的角色。模板引擎作为整体概念,Velocity 作为具体实现,它们的生命在 HTML 之外。Velocity 把数据合并到文本主体中不同的点上。文本可以是文字、电子邮件或 HTML。由于采用这种方式,Velocity 模板引擎有点儿像 Microsoft Word 的“邮件合并”特性。邮件合并允许您方便地把动态数据(例如姓名、地址和电话号码)合并到信件中。在早期的日子里,组织用这项特性生成大型邮件列表并把它们送到邮局,导致垃圾邮件的产生!
Velocity 是什么?Velocity 是一个基于 Java 的模板引擎,它提供了简单的基于模板的语言,可以用类似脚本的方式引用对象。Velocity 促进了分离团队成员之间的责任:允许 Web 设计人员专注于视图(即页面的观感),而 Java 程序员专注于后端代码。把 Java 代码从页面布局中分离出来,会让 Web 应用程序未来更易维护。当 Velocity 与 Sruts 这样的 MVC 框架结合时,就成了 JSP 或 PHP 可行的替代。
在 Web 应用程序中,Velocity 实现的目标与 JSP 相同:可以用它在向 HttpServletResponse 的 OutputStream 发送之前生成要发送的 HTML。在 Struts 应用程序中使用 Velocity 的一种方式是在 Struts 的 Action 内部写入响应,然后返回 null 的 ActionForward。虽然这种技术可行,但却有严重的缺陷:无法使用 struts-config.xml 文件把响应抽象出来。把视图放在 Action 内部,意味着如果想要修改响应,就必须修改 Action。
因为这种技术剥夺了 Struts 最好的一项特性(即从视图中抽象出重点的能力),所以我更愿意把所有响应指向一个 servlet,由它负责访问 Velocity 模板,合并上下文的数据,生成响应,然后再送回浏览器。稍后就会学到,Velocity 的设计者们已经把这些步骤全都捆绑在了一起:您需要做的只是跟着我来看如何一步步地实现它们。如果您还没有 访问“下载”一节,现在是访问的时候了。
--------------------------------------------------------------------------------
回页首
Velocity 的五步
把 Struts 与 Velocity 模板引擎组合起来很简单,也很直接;实际上,只要用五步就可以实现:
把 Velocity JAR 放在类路径中。
修改 web.xml 文件让它识别 Velocity servlet。
把 Velocity toolbox.xml 放在应用程序的 WEB-INF 目录下。
修改 struts-config,把它的视图指向 Velocity 模板而不是 JSP。
为每个需要显示的页面创建 Velocity 模板。
我将用一个熟悉的搜索用例来演示 Struts 与 Velocity 的集成。在这个示例中,一个简单的应用程序允许用户按照图书的 ISBN 编号搜索图书。应用程序的结果页面显示与 ISBN 编号匹配的图书。
放弃 Struts 标记 —— 不!现在,您可能会想,是不是需要放弃那些过去让您节约了许多编码时间的很好的 Struts 标记。如果不使用 JSP,那么肯定没有使用 Struts 的 JSP 标记!幸运的是,您可以使用 Velocity 工具。Velocity 的 Struts 工具提供了所有您熟悉的 Struts 方便特性,但是添加了 Velocity 的灵活性。
第 1 步:把 Velocity JAR 放在 WEB-INF/lib 下
如果您还没下载 Velocity,那么现在需要下载它。Velocity 本身是很棒的,但是它的工具包可以帮助您把工作做得更好更快。特别是 Struts 工具模拟了您以前熟悉的 Struts 标记。请参阅 下载 一节下载 Velocity 模板引擎和 Velocity 工具。
请注意不同时候,需要的 jar 也会略有不同。在这里我不想列出一个 JAR 列表,只是想建议您访问 Velocity 的主页(请参阅 参考资料)并阅读那里的安装指南。一旦得到了需要的 JAR,只需把它们放在 WEB-INF\lib 下面即可。
第 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-INF/toolbox.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 的情况下,优势就是简单性、容易学习以及更好的性能。
发表评论
-
Struts1.x教程:配置文件总结
2011-03-16 09:07 2091要想使用Struts,至少要 ... -
JSP:does not start with a "/" character
2010-12-23 08:57 2430严重: Servlet.service() for servl ... -
struts框架 taglib 之logic:present和logic:notPresent
2010-12-10 08:50 5041<logic:present>及<logic ... -
对Struts1.x的ActionForm的理解运用
2010-12-08 09:52 2180封装表单值 Struts1.x通过ActionForm的子类 ... -
Struts 1.XX <html:file>的使用
2010-12-06 11:18 5014COPY兄弟博客 http://12345678.iteye. ... -
Struts的<html:javascript>
2010-08-14 16:47 3557Struts的<html:javascript>标 ... -
<html:radio>/<html:select> 默认选中
2010-05-17 19:42 22377<html:radio> <tr> ... -
Struts1.x 重复提交剖析
2010-01-05 16:18 2021在某些情况下,如果用户对一个HTML表单重复提交,Web应用应 ... -
struts1.x相关知识小结
2010-01-01 16:35 13811、 ActionForm如果要求在传递到Action之前 ...
相关推荐
3. **Struts与Velocity集成**: - 集成的关键在于将Struts的视图部分替换为Velocity模板。在Struts的ActionForward中指定Velocity模板的路径,而不是JSP页面。 - 在`struts-config.xml`中配置Action,设置其...
在Struts2与Velocity集成的过程中,首先需要在Struts2的配置文件中指定Velocity作为视图解析器。这通常是在struts.xml文件中添加一个`<result>`标签,并设置类型为`velocity`,如下所示: ```xml <result type="...
通过研究这个压缩包,开发者可以深入理解如何在Struts2中集成Velocity,以及如何利用Velocity的特性来创建动态、高效的Web应用。同时,这也是一种了解MVC架构如何在实践中运作的好方式。为了更好地利用这些资源,...
以下是关于Struts2与Velocity集成的一些关键知识点: 1. **配置集成**:在Struts2的配置文件(struts.xml)中,需要声明Velocity结果类型,以便Struts2知道如何处理 Velocity模板。通过添加`<result-type>`标签并指定...
Struts和Velocity是两...通过这个项目,开发者可以深入理解Struts和Velocity的集成,学习如何利用MVC模式来组织代码,以及如何利用Velocity模板优雅地呈现数据。这对于提升Java Web开发技能和构建实际项目非常有帮助。
在 Struts2 框架中,Velocity 模板引擎可以与 Struts2 集成,实现了显示层与程序代码的分离。 Velocity 模板引擎的优点在于,它可以使得开发人员快速开发显示层,同时也可以与 Struts2 框架集成,以实现显示层与...
Struts2与Spring的集成,可以让Spring管理Struts2的Action实例,实现依赖注入,增强Action的可测试性和可维护性。 JSON在前后端通信中扮演了关键角色。通常,Struts2 Action执行完毕后,会返回一个包含业务数据的...
Struts2 和 Velocity 是两种广泛应用于Java Web 开发中...在提供的压缩包文件 "Velocity" 中,可能包含了使用Velocity模板的示例或模板文件,这可以帮助开发者更好地理解和学习如何在Struts2项目中集成和使用Velocity。
在Struts2与Velocity结合使用时,通常会将Velocity模板作为Action执行后的Result,这样Action处理完业务逻辑后,会将控制权交给Velocity模板来生成最终的HTML响应。开发者可以利用Struts2的Action和Interceptor来...
在这个"struts2+spring+velocity扩展实例V1版本"中,我们可以看到这三个框架的集成与应用。 首先,Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它的主要职责是处理用户的请求,并将其...
Struts2集成FreeMarker和Velocity,写成了工具类,快速实现页面静态化,以后直接调用即可,无需修改任何源代码,改压缩文件包括 1、工具类; 2、源码(含jar包); 3、mysql数据库可执行文件; 4、struts2集成...
他也可用于一个独立的程序以产生源代码和报告,或者作为其它系统的一个集成组件。这个项目完成后,Velocity将为Turbine web 应用程序框架提供模板服务。Velocity+Turbine 方案提供的模板服务将允许web 应用按真正的...
在"Velocity003"这个压缩包中,可能包含了一些关于如何在Struts2项目中集成和使用Velocity模板的示例代码或教程。例如,可能有Action类的实现,展示了如何设置和返回结果对象;还有Velocity模板文件,演示了如何在...
Spring还包含对数据库访问的支持,如JDBC抽象层,以及与ORM框架如Hibernate和MyBatis的集成。 **Velocity** 是一个开源的Java模板引擎,它允许开发者将HTML和业务逻辑分离。Velocity模板语言(VTL)简洁、直观,...
此外,Struts2支持多种结果类型,如JSP、FreeMarker、Velocity等,方便视图的展示。 接下来是Shiro。Shiro提供了一种简单的方式来处理用户的登录、权限控制和会话管理。它的核心组件包括Subject(代表当前用户)、...
Struts、Spring 和 Velocity 是Java开发中常用的三个框架,它们在构建企业级Web应用程序时起着关键作用。这里我们将深入探讨这些技术的核心概念、如何协同工作以及它们在实际项目中的应用。 **Struts** Struts 是一...
总之,"struts2.2+velocity+tiles+spring3+mybatis3.05整合"实例展示了Java Web开发中的典型技术栈集成,为开发者提供了高效、稳定的开发环境,有助于提升项目开发的速度和质量。通过学习和实践这个实例,开发者可以...
Velocity是一个基于Java的模板引擎,它将控制逻辑与表现逻辑分离,使得开发者可以专注于内容的呈现,而Struts2则是一个强大的MVC(模型-视图-控制器)框架,提供了丰富的功能来处理HTTP请求和业务逻辑。这两个框架的...
在Java世界中,Velocity常被用来作为MVC框架中的视图层技术,与Struts2等框架集成,以实现更灵活的页面渲染。 在Struts2框架中整合Velocity,首先需要确保引入了必要的依赖库。根据提供的标签和部分内容,这些库...
集成ExtJS与Struts2的主要目的是实现前后端的无缝通信,以提供更流畅的用户交互。通常,这个过程涉及以下几个步骤: 1. **配置Struts2** 首先,需要在项目的`struts.xml`配置文件中定义全局结果类型,以便支持JSON...