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 的一个实现,类图如下所示
以上仅仅说明 ActionSupport 和 Action 之间的关系,实际上 ActionSupport 还实现了其他接口,实现了不少常用的功能,给开发带来很多方便。
ActionSupport 是 Struts 2 默认执行的 Action。 一般的企业开发中,都会考从 ActionSupport 扩展一个 BaseAction 作为自己业务 Action 的基类,并把这个 BaseAction 设置为默认 Action:
struts.xml
<package ... >
<default-class-ref class="... the BaseAction path ..."/>
</package>