The Package Tag:
<package … />被用于配置集合,以便于共享属性,例如拦截器栈或是URL命名空间.通常它由action的配置组成,但它可以包含任何类型的配置信息.它对隔离功能的组织也非常有用,可以更进一步,将其分成不同的配置文件.
这个标签有如下属性:
.name--开发人员为包指定的唯一的名称
.extends--此包将扩展的包的名称;扩展包里的所有配置信息(包含action配置),在新包里都是可用的,在新的命名空间之下.
.namespace--命名空间提供了一个URL到包的映射.例如,两个不同的包,命名空间属性分别是"package1"和"package2",URL看起来则是"/myWebApp/package1/my.action"和"/myWebApp/package2/my.action".
.abstract--如果这个属性的值为"true",这个包则是真正的配置组,并且actions的配置将不能通过包名访问.
确定选择正确的父类包是非常重要的,以便一些必要的被预先配置的特征可供你使用.大多数的时候,这个父包都将是"struts-default.xml"配置文件中的"struts-default"包.然而,当你使用插件时,它将会不同.这时,你将需要从插件的文档中查换你所需要的父类包的名称.
在本章剩余的部分,将讨论包含在包标签内的配置信息.
这里还有两个额包的配置元素可以在<struts>标签内使用.它们是<bean ... />和<constant … />标签.这些标签提供了更高级的路径来重新定义框架.我们将在下一章讨论插件的时候,再来讨论这些标签的用法和配置方法.
Actions
Actions是大多数WEB应用框架中的基本概念,并且它们是来自用户的与HTTP相关请求的最基础的工作单元.
在Struts2中,action有两种不同的方式被使用.
Single Result
第一,并且是action的常用法,它完成工作,并总是返回一个结果.这种情况下,action看起来是这样的:

class MyAction
{2

public void String execute() throws Exception
{3
return "success";4
}5
}
有几件事值得注意.第一,action类不需要扩展另一个类并且它也不需要实现任何接口.对任何人来说,这个类就是一个简单的POJO.
第二,这个类里有一个名为"execute"的方法.这个名称是一个习惯用法.如果你想使用其他的名称而不是"execute",仅仅需要更改一下action的配置文件.无论这个方法的名称是什么,它都将返回一个字符串的结果代码.Actions配置文件将匹配这个action返回的结果代码到一个特定的结果,其呈现给用户.如果需要,这个方法同样可以抛出一个异常.
简单的action的配置看起来是这样的:
<action name="my" class="com.fdar.infoq.MyAction" >2
<result>view.jsp</result>3

