.

如何在Web应用中实现Velocity与

软件项目实训及课程设计指导——如何在Web应用系统中实现Velocity与Struts框架相互集成的应用实例

1、VelocityTools子项目及其中的VelocityStruts组件

(1)VelocityTools是什么

VelocityTools是Velocity模板引擎的一个子项目,实现将Velocity模板引擎与J2EEWeb开发环境集成的工具包。如下示例图是ApacheVelocity模板官方网站中对VelocityTools的技术特性和主要功能介绍的局部截图。

J2EEWeb应用系统的设计和开发人员通过应用VelocityTools中相关的组件,不仅可以将Velocity模板引擎应用于普通的J2EEWeb应用系统环境中,也还可以与J2EE系统平台中的各种应用框架相互集成,从而也允许将Velocity模板引擎应用于如Struts和Struts2、Spring等应用框架的环境中。

(2)VelocityStruts组件

VelocityTools子项目中的VelocityStruts组件包含集成Velocity模板引擎与Struts应用框架的所有功能。VelocityStruts提供了一组专用的Velocity模板引擎工具,用于访问Struts应用框架中专有的资源和Velocity模板文件中的信息。其主要的目的就是结合Velocity模板引擎在MVC体系架构的应用系统中的视图层上的优势跟Struts应用框架在MVC体系架构的应用系统中的控制层上的优势。

VelocityStruts组件会在Struts应用框架的Action组件类返回某个actionForward目标对象之后,自动地检测返回的目标资源的类型——如果发现是一个*.jsp页面文件,则它自动调用JSP解析器Jasper并按照传统的JSP页面流程执行,而如果一旦发现它返回的目标资源是一个Velocity模板引擎的模板*.vm文件,则会自动地调用Velocity模板引擎中的模板解析引擎对其进行处理——也就是让Struts应用框架的forward最终转向某个*.vm文件。

如下图所示为Velocity官方网站上对VelocityStruts工作原理及请求响应处理流程的功能介绍的页面内容的局部截图。

2、VelocityStruts系统包文件和用于VelocityStruts集成的各种工具

由于在Velocity模板引擎系统中没有提供类似于Struts应用框架标签库中的各个功能标签,而替代的方式是采用toolbox.xml定义文件自定义工具类,这些工具类可以直接在Velocity模板引擎的模板页面中使用——因为这些工具类和Struts应用框架标签的功能类似,但在使用规则上要比Struts应用框架的标签更容易和更灵活。

下图所示为下载的velocity-tools-1.4.zip工具包文件中所包含的各个工具类所在的JAR包文件,主要为三个文件:velocity-tools-generic-1.4.jar、velocity-tools-1.4.jar和velocity-tools-view-1.4.jar。在将Velocity与Struts应用框架相互集成时,应该要将它们加入到Web系统的WEB-INF/lib目录中。

下表所示为VelocityTools子项目中的主要的工具类的功能说明,这些工具不仅保留了Struts框架标签的方便特性,而且还具有Velocity模板引擎的灵活性。从而可以在模板页面中达到与采用Struts框架标签库的标签相同的应用功能效果。

由于本文的篇幅有效,读者如果在开发中需要详细学习和了解这些工具类的功能说明,可以浏览Velocity模板引擎官方网站上对相关工具类的技术介绍资料(参看如下示图所示)。

3、VelocityStruts工具箱配置文件toolbox.xml

J2EEWeb应用系统的开发人员可以在VelocityStruts工具箱配置文件toolbox.xml中定义在Web项目中所需要的与Velocity模板引擎配合使用的各种实用工具类,在Velocity模板引擎系统中提供了许多预先构建好的工具、并且还创建了许多Struts应用相关的工具来模拟Struts框架中的标签功能。

如下代码示例中的示例为某项目中定义的toolbox.xml文件中的示例内容,并且该文件放在WEB-INF文件目录中。这些工具类的主要功能请读者参考上面表中的功能说明,Web应用系统的开发人员可以根据Web项目中的需要有选择地定义有关的工具类——某Web项目中定义的toolbox.xml文件中的示例内容

?xmlversion=1.0?

toolbox

tool

keylink/key

scoperequest/scope

classorg.apache.velocity.tools.struts.StrutsLinkTool/class

/tool

tool

keymsg/key

scoperequest/scope

classorg.apache.velocity.tools.struts.MessageTool/class

/tool

tool

keyerrors/key

scoperequest/scope

classorg.apache.velocity.tools.struts.ErrorsTool/class

/tool

tool

keyform/key

scoperequest/scope

classorg.apache.velocity.tools.struts.FormTool/class

/tool

tool

keytiles/key

scoperequest/scope

classorg.apache.velocity.tools.struts.TilesTool/class

/tool

tool

keyvalidator/key

scoperequest/scope

classorg.apache.velocity.tools.struts.ValidatorTool/class

/tool

/toolbox

4、在web.xml文件中配置VelocityViewServlet组件以处理模板文件

由于VelocityStruts是通过一个名为VelocityViewServlet的Servlet组件实现将所有的请求以*.vm为结尾的资源都转交给这个Servlet组件去处理。因此,需要在Web项目的部署描述符web.xml文件中配置定义出VelocityViewServlet以处理项目中的各种*.vm文件、并且告诉VelocityViewServlet在哪里可以找到toolbox.xml的定义配置文件——请见下面的代码示例中所示的在web.xml文件中对VelocityViewServlet的配置定义内容示例——在web.xml文件中对VelocityViewServlet的配置定义内容示例

servlet

servlet-namevelocity/servlet-nameservlet-classorg.apache.velocity.tools.view.servlet.VelocityViewServlet/servlet-class

init-param

param-nameorg.apache.velocity.toolbox/param-name

param-value/WEB-INF/toolbox.xml/param-value

/init-param

init-param

param-nameorg.apache.velocity.properties/param-name

param-value/WEB-INF/velocity.properties/param-value

/init-param

load-on-startup10/load-on-startup

/servlet

servlet-mapping

servlet-namevelocity/servlet-name

url-pattern*.vm/url-pattern

/servlet-mapping

该VelocityViewServlet的一个初始化参数“org.apache.velocity.toolbox”的含义是在系统中引入了一个工具箱配置文件toolbox.xml,而另一个初始化参数org.apache.velocity.properties定义了Velocity的属性配置文件的位置,这个velocity.properties属性文件定义了Velocity的一些配置信息——读者可以参考前面的代码示例中的velocity.properties属性配置文件的示例。

通过对VelocityViewServlet的配置定义达到把以*.vm结尾的文件发送给VelocityViewServlet,而VelocityViewServlet把Velocity模板引擎的命令处理结果表示成HTML响应输出。

Struts应用框架的控制器把视图转发给VelocityViewServlet组件,而VelocityViewServlet组件在向客户端浏览器发送最终的响应结果之前处理目标*.vm资源文件。

VelocityViewServlet组件提供了对请求对象和属性、会话对象和属性以及Servlet上下文和属性的直接访问。但在应用它时,Web应用系统的开发人员要保证在WEB-INF/lib目录下必须要有Velocity模板引擎的velocity-tools-view-1.4.jar系统包文件(请见前面示图中所示系统包目录及文件截图)。

5、编程Action类和在struts-config.xml配置文件中定义Action类

(1)编程实现特定功能的Action类程序

下面的代码示例中所示的UserLoginAction类主要识别用户请求提交的参数是否为合法的值,如果正确则转发到名称为loginSuccess的目标资源中,否则将转发到名称为loginFailure的目标资源中、并产生出错误信息——实现用户登陆功能请求处理的UserLoginAction类代码示例。

package


转载请注明:http://www.abachildren.com/jbzs/3742.html