Action 的三种定义方式

Struts2 中,Action 的定义可以有多种方式实现。

1. POJO

Struts2 的 action 和 Struts1 有些不同,可以就是一个普通的 Java 类,只要里有一个 String execute() 方法就行。

甚至方法名不用 execute() 也行,这需要在 struts.xml 中配置里修改 <action> 的 method 值:

        <action name="hello" class="org.iridium.hellostruts.HelloWorldAction"
            method="execute">
            <result name="success">/HelloWorld.jsp</result>
        </action>

一般地,保持 method 的默认值就行,不用修改。

这种定义 Action 的方式说明 Struts 2的框架是低侵入式的,并不强制要求 implements Action 或 extends ActionSupport.

2. implements Action

com.opensymphony.xwork2.Action

这是一个接口,定义了几个常量:

以及一个方法 String execute()

用这种方式定义 Action,可以直接使用接口中定义的几个常量。

3. extends ActionSupport

com.opensymphony.xwork2.ActionSupport

ActionSupport 是 Action 的一个实现,类图如下所示

Struts action class diagram

以上仅仅说明 ActionSupport 和 Action 之间的关系,实际上 ActionSupport 还实现了其他接口,实现了不少常用的功能,给开发带来很多方便。

ActionSupport 是 Struts 2 默认执行的 Action。 一般的企业开发中,都会考从 ActionSupport 扩展一个 BaseAction 作为自己业务 Action 的基类,并把这个 BaseAction 设置为默认 Action:

struts.xml

<package ... >
    <default-class-ref class="... the BaseAction path ..."/>
</package>