用ActionMapping构建漂亮的Struts应用程序
在本系列指南的第四部分,你可以学习如何运用ActionMapping来改进你的Struts应用程序。
by Budi Kurniawan
阅读本系列指南的前三部分:
第一部分:“你的第一个Struts应用程序”
第二部分:“Struts应用程序中的流程控制”
第三部分:“用ActionForward优化你的Struts应用程序”
邱吉尔曾经说过他喜欢学习新东西,但他觉得没有必要让别人教他。不管你是否喜欢学习新知识,也不管有人教你还是你自学,学习Java通常意味着仔细研究许多非凡的类。学习Struts也是如此。
这就是我写本系列第四部分的初衷,在本文中,我将详述org.apache.struts.action.ActionMapping类,它是从org.apache.struts.config.ActionConfig派生的。ActionMapping将一个请求路径映射到一个action类,它是Struts应用程序中最常用的类之一。在你深入学习这个类时,你会重新用到在该系列第1、2和3部分创建的两个login应用程序,从而了解如何运用ActionMapping来重写应用程序。
当然,你可能不记得以前用过任何ActionMapping实例了。这是因为控制器servlet实际上为你创建了它们。你只需要配置在Struts配置文件(struts-config.xml)中创建的每个ActionMapping实例就行了(通过给它的属性赋值)。了解这些属性对正确运用ActionMapping类很重要,因此我将讲述这些属性以及如何定义它们。
首先,让我们回想一下,Struts配置文件的根元素是<struts-config>。<struts-config>元素可以包含一个可选的<action-mappings>元素,同样<action-mappings>元素可以包含<action>元素。例如,下面就是本系列第三部分的login应用程序配置文件中的<struts-config>元素及其子元素:
<struts-config>
<action-mappings>
<action path="/login"
type="com.javapro.struts.LoginAction"/>
<action path="/logout"
type="com.javapro.struts.LogoutAction"/>
<action path="/viewSecret"
type="com.javapro.struts.ViewSecretAction"/>
</action-mappings>
</struts-config>
<action-mapping>中的每个<action>都代表控制器servlet创建的一个ActionMapping实例。一个<action>元素可以包含多个特性,每个特性都和ActionMapping实例中的一个属性相应。
作为例子,我们来看前面的Struts配置文件中的这个<action>元素:
<action path="/login"
type="com.javapro.struts.LoginAction"/>
这个<action>将路径“/login”映射到action类com.javapro.struts.LoginAction。换句话说,一个以“/login.do”结尾的用户请求将被传递到LoginAction类。然而,ActionMapping也有其它的用途。你(Struts程序员)可以通过给它的属性赋值来给ActionMapping实例下达action指令。(有些属性与action forms相关,我将在本系列的第五部分讲述。)
ActionMapping类的属性