如何实现Action类:对于Struts2应用开发者而言,Action才是应用的核心,开发者需要提供大量Action类,并在S文件中配置Action。Action类里包含了对用户请求的处理逻辑,Action类也被称为业务控制器。
相对于Struts1而言,Struts2采用了低侵入式的设计,Struts2不要求Action类继承任何的Struts2基类,或者实现热河Struts2接口。在这种设计方式下,Struts2的Action是一个普通的POJO(通常应该包含一个无参数的execute方法),从而有很好的代码复用性。
Struts2通常直接使用Action来封装HTTP请求参数,因此,Action类里还应该包含与参数对于金属,并且,为这些属性提供对应的setter和getter方法。
例如,用户请求包含User和pass两个请求参数,那么Action类应该提供user和pass两个属性来封装用户的请求参数,并且为user和pass提供对应的setter和getter方法。下面是处理请求的Action类的代码片段。
//处理用户请求的Action类,只是一个POJO,无须继承任何基类,无须实现任何接口
public class LoginAction
{
//提供两个属性来封装HTTP请求参数
privata string user;
privata string pass;
//user 属性的 getter和setter方法
public void setUser(string user)
{
= user;
}
public string getUser()
{
return ();
}
//pass 属性的 getter 和setter 方法
public void setpass(string pass)
{
= pass;
}
public string getpass()
{
return ();
}
//Action类默认处理用户请求的方法:execute 方法
public String execute()
{
...
//返回处理结果字符串
return resultstr;
}
}
上面的Action类只是一个普通JAVA类,这个JAVA类提供了两个属性:user和pass(如程序中粗体字代码所示),并为这两个属性提供了setter和getter方法,这两个属性分别对应两个HTTP请求参数。上面LoginAction中的execute()方法就是处理用户请求的逻辑控制方法。
提示:即使Action处理的请求包含user和pass两个HTTP请求参数,Action类也可以不包含user和pass Field。因为系统是通过对应的setter和getter方法来处理请求的参数的,而不是通过Field名来处理请求参数的。也就是说,如果包含了user的HTTP请求参数,Action类里是否包含user Field不重要,重要的是需要包含void setUser(String user)和String getUser()两个方法。