Action 是用于处理请求操作的,它是由 StrutsPrepareAndExecuteFilter 分发过来的。
在 Struts2 框架中,Action 是框架的核心类,被称为业务逻辑控制器,主要用于实现对用户请求的处理。
一个 Action 类代表一次请求或调用,每个请求的动作都对应一个相应的 Action 类。也就是说,用户的每次请求,都会转到一个相应的 Action 类中,由这个 Action 类进行处理。
简而言之,Action 就是用于处理一次用户请求的对象。
与传统的MVC框架相比,可以实现struts2接口,也可以不实现struts2接口,传统MVC必须实现MVC接口,就和MVC框架严重耦合。
创建一个Action 一般都会继承ActionSupport ,并且定义变量,覆盖execute方法。变量会被struts2通过setter方法自动赋值,execute方法中直接使用即可。
当然也可以不继承,但是必须有 execute() 方法,当然也可以实现Action 接口。
注意:action类的全路径(即包名)必须含有”action”的词汇。
ActionSupport类
ActionSupport 是 Action 接口的默认实现类,所以继承 ActionSupport 就相当于实现了 Action 接口。
除 Action 接口以外,ActionSupport 类还实现了 Validateable、ValidationAware、TextProvider、LocaleProvider 和 Serializable 等接口,这为用户提供了更多的功能。
ActionSupport 类中提供了许多默认方法,这些默认方法包括数据校验的方法、默认的处理用户请求的方法等。
如果开发者的 Action 类继承 ActionSupport 类,会大大简化 Action 的开发
public class HelloWorldAction extends ActionSupport {
private Message msg;
@Override
public String execute() throws Exception {
msg = new Message();
return SUCCESS;
}
public Message getMsg() {
return msg;
}
public void setMsg(Message msg) {
this.msg = msg;
}
}
Action 接口
Action 接口位于 com.opensymphony.xwork2 包中,并且接口中只定义了五个字符串常量和一个 execute() 方法。
其中,execute() 方法是 Action 类的默认请求处理方法,该方法返回一个字符串,而上面五个字符串常量的作用是统一 execute() 方法的返回值。
import com.opensymphony.xwork2.Action;
public class ImplAction implements Action {
public String execute() throws Exception {
System.out.println("ImplAction...run");
return "defaultAction";
}
}
不继承任何类的Action
如果Struts2发现Action类没有实现Action接口,会通过反射来调用execute方法。
好处就是不予struts2耦合。
public class DefaultAction {
public String execute() throws Exception {
System.out.println("DefaultAction...run");
return "";
}
}