分享

Action对象

 太极混元天尊 2018-04-13

     Action对象是Struts2框架中的重要对象,主要用于处理HTTP请求。在Struts 2 API中,Action对象是一个接口,位于com.opensymphony.xwork2包中。通常情况下,我们在编写Struts 2项目时,在该接口中,除了定义execute()方法外,还定义了5个字符串类型的静态变量。com.opensymphony.xwork2.Action接口的关键代码如下:

public interface Action{
  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';
  public String execute() throws Exception;
}

     在Action接口中,包含5个静态变量,它们是Struts 2 API为处理结果定义的静态变量,具体的含义如下。

     (1)SUCCESS

     静态变量SUCCESS代表Action执行成功的返回值,在Action执行成功的情况下需要返回成功页面,则可设置返回值为SUCCESS。

     (2)NONE

     静态变量NONE代表Action执行成功的返回值,但不需要返回到成功页面,主要用于处理不需要返回结果页面的业务逻辑

     (3)ERROR

     静态变量ERROR代表Action执行失败的返回值,在一些信息验证失败的情况下可以使Action返回此值。

     (4)INPUT

     静态变量INPUT代表需要返回某个输入信息页面的返回值,如在修改某此信息时加载数据后需要返回到修改页面,即可将Action对象处理的返回值设置为INPUT。

     (5)LOGIN

     静态变量LOGIN代表需要用户登录的返回值,如在验证用户是否登录时Action验证失败并需要用户重新登录,即可将Action对象处理的返回值设置为LOGIN。

二、请求参数的注入原理

     在Struts 2框架之中,表单提交的数据会自动注入到与Action对象中相对应的属性,它与Spring框架中的IoC注入原理相同,通过Action对象为属性提供setter方法进行注入。例如,创建UserAction类,并提供一个username属性,其代码如下:

public class UserAction extends ActionSupport {
  // 用户名属性
  private String username;
  // 为username提供setter方法
  public void setUsername(String username) {
    this.username = username;
  }
  // 为username提供getter方法
  public String getUsername() {
    return username;
  }
  public String execute() {
    return SUCCESS;
  }
}

      需要注入属性值的Action对象必须为属性提供setter()方法,因为Struts 2的内部实现是按照JavaBean规范中提供的setter()方法自动为属性注入值的。

     由于Struts 2中Action对象的属性通过其setter()方法注入,所以需要为属性提供setter()方法。但在获取这个属性的数值时需要通过getter()方法,因此在编写代码时最好为Action对象提供setter()与getter()方法。

三、Action的基本流程

     Struts 2框架主要通过Struts的过滤器对象拦截HTTP请求,然后将请求分配到指定的Action处理,其基本流程如下图所示:

说明:在Struts框架中,一个“*.action”请求的返回视图由Action对象决定。其实现方法是通过查找返回的字符串为success,那么Struts 2就会在配置文件中查找名为success的配置项,并返回这个配置项对应的视图。

四、动态Action

     前面所讲解的Action对象都是通过重写execute()方法处理浏览器请求,此种方法只适合比较单一的业务逻辑请求。但在实际的项目开发中业务请求的类型多种多样(如增、删、该和查一个对象的数据),如果通过创建多个Action对象并编写多个execute()方法来处理这些请求,那么不仅处理方式过于复杂,而且需要编写很多代码。当然处理这些请求的方式有多种方法,如可以将这些处理逻辑编写在一个Action对象中,然后通过execute()方法来判断请求的是哪种业务逻辑,在判断后将请求转发到对应的业务逻辑处理方法上,这也是一种很好的解决方案。

     在Struts 2框架中提供了Dynamic Action这样一个概念,称为动态Action。通过动态请求Action对象中的方法实现某一业务逻辑的处理。应用动态Action处理方式如下图所示:

     从图中可以看出,动态Action处理方式通过请求Action对象中的一个具体方法来实现动态操作,操作方式是通过在请求Action的URL地址后方加上请求字符串(方法名)与Action对象中的方法搭配,注意Action地址与请求字符串之间以“!”号分隔。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多