在Struts2中,一个Action类是一个独立的工作单元。一个Action类代表了用户的一次请求或调用,用户的每次请求,都会转到一个相应的Action类里面,由这个Action类来进行处理。简单来说,Action就是用来处理用户请求的对象。
Action类是Struts2的核心功能,对于开发者而言,使用Struts2就是编写Action类。
在Struts2中,Action以多种形式存在,例如在Java类充当Action、继承ActionSupper类实现Action接口和Action。
Struts2最大的特点:Action类可以是一个普通的Java类,实现了与Servlet API的完全分离。它包含了无参数的execute()方法、成员变量及其setter()和getter()方法。
public class HelloWorld {
private String message;
public String getMessage(){
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String execute(){
if(message.equals(“”)){
return “error”;
}else{
Return “success”;
}
}
}
Struts2提供了一个com.pensymphony.xwork2.Action接口和实现该接口的execute()方法,该方法为:
public String execute() throws Exception
在实际开发中,action类很少直接实现Action接口,通过继承ActionSupper来实现Action是最常用的方法,ActionSupper实现了Action接口,还实现了Validateable接口、ValidationAware接口、TextProvider接口等,提供了输入验证、国际化、execute等常用方法,使得用户在编写Action时代码更加简单。选择从ActionSupport继承,可以简化action的定义。
然而Action要正确运行,则需要在Struts.xml中配置才可以使用。而struts.xml文件是Struts应用中一个非常重要的核心配置文件,要负责管理业务控制器Action。
<package>元素:Struts2通过包来管理Action、拦截器等核心组件。它把逻辑上相关的一组Action、Result、Intercepter等元素封装成一个独立的模块,简称为包。package可以继承其他的package,也可作为父包被其他的package继承。Package元素的属性如下:
name:包名,作为其他包引用本包的标识符,该属性必须配置。
extends:用于继承其他的包,后面配置的是被继承的包的名称,该属性为可选
namespace:包的命名空间,该属性为可选。同一命名空间不能有同名的Action。namespace可防止action重名的冲突,因在配置了namespace后,在访问action时就需添加namespace来作为action的前缀。若没有配置namespace,则表示是默认的namespace,在访问时就不需添加namespace前缀。
abstract:设置为抽象包,也就是不能包含Action的定义,该属性为可选。可被其他包继承,因此里面可定义其他包所需元素,如ResultType、Interceptor等。
配置时需注意:
<action>元素时<package>元素的子元素,应配置在<package>元素里面
<package>元素可以把
<action>元素需配置name和class属性,其中name是必须的
<action>元素可以包含其他的子元素:<param>、<result>、<interceptor-ref>