2.5 改进控制器
通过前面介绍,读者已经可以完成简单的Struts 2的基本应用了,但还可以进一步改进应用的Action类,例如该Action类可以通过实现Action接口,利用该接口的优势。前面应用的Action类没有与JavaBean交互,没有将业务逻辑操作的结果显示给客户端。
2.5.1 实现Action接口
表面上看起来,实现Struts 2的Action接口没有太大的好处,仅会污染该Action的实现类。事实上,实现Action接口可以帮助开发者更好地实现Action类。下面首先看Action接口的定义:
public interface Action
{
//下面定义了5个字符串常量
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";
//定义处理用户请求的execute抽象方法
String execute() throws Exception;
}
在上面的Action代码中,我们发现该Action接口里已经定义了5个标准字符串常量:SUCCESS、NONE、ERROR、INPUT和LOGIN,它们可以简化execute方法的返回值,并可以使execute方法的返回值标准化。例如处理成功,则返回SUCCESS常量,避免直接返回一个success字符串(程序中应该尽量避免直接返回数字常量、字符串常量等)。
因此,借助于上面的Action接口,我们可以将原来的Action类代码修改为如下:
程序清单:codes\02\struts2qs\WEB-INF\src\lee\LoginAction.java//实现Action接口来实现Struts 2的Action类
public class LoginAction implements Action
{
//下面是Action内用于封装用户请求参数的两个属性
private String username;
private String password;
//username属性的getter和setter方法
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
//password属性的getter和setter方法
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
//处理用户请求的execute方法
public String execute() throws Exception
{
//当用户请求参数的username等于crazyjava,密码请求参数为leegang时,
//返回success字符串,否则返回error字符串
if (getUsername().equals("crazyjava")
&& getPassword().equals("leegang"))
{
return SUCCESS;
}
else
{
return ERROR;
}
}
}
对比前面Action和此处的Action实现类,我们发现两个Action类的代码基本相似,除了后面的Action类实现了Action接口。因为实现了Action接口,故Action类的execute方法可以返回Action接口里的字符串常量。
【责任编辑:云霞 TEL:(010)68476606】
点赞 0