Struts2中的action类

作为一个MVC框架,Struts2中的action类在其整体架构中起到了非常核心的作用。action类在Struts2中承担了Model(模型)的角色,主要用于处理业务逻辑并存放HTTP请求处理过程中各个变量的值。那么,能作为action的Java类需要满足什么要求?Struts2中的Action接口又是什么?Struts2中的ActionSupport类又提供了哪些支持呢?

action类

在Struts2中,作为action的Java类不需要继承任何父类,也不需要实现任何接口。只要包含一个叫做execute()的方法,同时该execute()方法返回类型为String,那么这个Java类就可以作为Struts2应用程序中的action类而出现。这么做的原因很明显:降低了应用程序代码和Struts代码之间的耦联,让应用代码更加的独立。

Action接口

Struts2提供了一个叫做Action的接口(com.opensymphony.xwork2.Action),凡是实现该接口的Java类均可作为action类来使用。Action接口的作用有两个:

  • 保证Java类满足Struts2对action类的要求 — 具有一个返回类型为String的execute()方法。
public String execute() throws Exception;  
  • 提供几个标准的返回值以供execute()方法使用。
public static final String SUCCESS = "success";  
public static final String NONE = "none";  
public static final String ERROR = "error";  
public static final String INPUT = "input";  
public static final String LOGIN = "login";  

ActionSupport类

除了Action接口,Struts2还提供了一个叫做ActionSupport的类(com.opensymphony.xwork2.ActionSupport),凡是从该类继承的Java类均可作为action类来使用。ActionSupport类的作用有以下几点:

  • 实现了Action接口,于是保证了Struts2对action类的要求。值得注意的是,ActionSupport类实现的execute()方法所返回的值为SUCCESS,因此如果从ActionSupport类继承的action类不覆写execute()方法,那么最终返回的值为SUCCESS。
public String execute() throws Exception {  
    return SUCCESS;
}
  • 实现了validate拦截器和workflow拦截器相关的接口,从而让action类能使用这些拦截器所提供的功能。action类通过实现相关接口来配合使用拦截器,是Struts2中的一个特点。通过对几个常用的拦截器接口进行实现,ActionSupport向继承自它的action类提供了更多的支持。
  • 提供一些工具方法以供子类使用,如:
public String input() throws Exception {  
    return INPUT;
}

public String doDefault() throws Exception {  
    return SUCCESS;
}