Struts 2.x权威指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.4.1 实现控制器类

Struts 2下的控制器不再像Struts 1下的控制器,需要继承一个Action父类,甚至可以无须实现任何接口,Struts 2的控制器就是一个普通的POJO。

实际上,Struts 2的Action就是一个包含execute方法的普通Java类,该类里包含的多个属性用于封装用户的请求参数。下面是处理用户请求的Action类的代码。

程序清单:codes\02\struts2qs\WEB-INF\src\org\crayzit\struts2qs\action\LoginAction.java

// Struts 2的Action类就是一个普通的Java类
public class LoginAction
{
    //下面是用于封装用户请求参数的两个属性
    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等于crazyit,密码请求参数为leegang时
          // 返回success字符串,否则返回error字符串
          if (getUsername().equals("crazyit")
                && getPassword().equals("leegang"))
          {
                return "success";
          }
          else
          {
                return "error";
          }
    }
}

提示:

Struts 2的Action本来应该放在Web应用的WEB-INF/classes目录下,但实际上这个源文件(包括后面介绍的各种本该放在 classes 目录下的配置文件、资源文件)被放在WEB-INF/src目录下——这是因为笔者使用了 Ant来管理这个项目,当使用Ant编译项目时,Ant会把src目录下的Java源文件编译到classes目录下,把src目录下的各种配置文件、资源文件复制到classes目录下。

上面的 Action 类是一个再普通不过的 Java 类,该类里定义了两个属性:username 和password,并为这两个属性提供了对应的setter和getter方法。除此之外,该Action类里还包含了一个无参数的execute方法——这大概也是Action类与POJO唯一的差别。实际上,这个execute方法依然是一个很普通的方法,既没有与Servlet API耦合,也没有与Struts 2 API耦合。

提示:

表面上看起来,该Action的两个属性只提供了对应的setter和getter方法,很难理解请求参数在什么时候赋值给该Action的属性。事实上,因为Struts 2的拦截器机制,它们负责解析用户请求参数,并将请求参数赋值给Action对应的属性。