二、Action对象

来源:互联网 发布:网络神话魔法圣皇 编辑:程序博客网 时间:2024/06/06 08:30

一、认识Action对象

   Action对象是Struts2框架的重要对象,它主要用于对HTTP请求进行处理。在Struts2API中,Action对象是一个接口,它位于

com.opensymphony.xwork2包中。Struts2项目开发中,创建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 Execption;

}

  在Action接口中,包含5个静态的成员变量,它们是Struts2API为处结果定义的静态变量

  SUCCESS:代表Action执行成功的返回值,如果Action执行成功,需要返回到成功页面,就可以将返回值设置为SUCCESS。

  NONE:代表Action执行成功返回值,但不需要返回到成功页面。

  ERROR:代表Action执行失败返回值。eg,在一些验证失败的情况下,可以使用Action返回此值。

  INPUT:代表需要返回到某个输入信息页面的返回值。eg,在修改某信息时,加载数据扣需要返回到修改页面,就可以将Action

         对象处理的返回值设置为INPUT。

  LOGIN:代表需要用户登录的返回值。eg,在验证用户是否登录时,Action验证失败,需要用户重新登录,就可以将Action对象

         返回值设置为LOGIN

 

二、请求参数的注入原理

 在Struts2中,表单提交的数据会自动注入与Action对象中相对应的属性,定与Sring框架中IOC注入原理相同,通过Action为属性提供

setter()方法进行注入

public class UserAction extends ActionSuppor{

  //用户名属性

  private String username;

  public void setUsername(String username){

    this.username = username;

  }

  public String getUsername(){

    return username;

  }

  public String execute(){

    return SUCCESS;

  }

}

 

三、Action的基本流程

(1)浏览器请求web容器

(2)web容器调用doFiter()请求Struts2过滤器

(3)Struts2过滤器调用execute()请求Action

(4)Action返回success给Struts2过滤器

(5)Sturts返回message给message.jsp

(6)mmessage.jsp返回浏览器

浏览器(请求)-------->web容器(doFilter())---->Struts2过滤器(execute())------>Action

 

由于在web项目中配置Strut2的过滤器,所以当浏览器向web容器发送一个HTTP请求时,web容器就要调用struts过滤器的doFilter()方法,

此时Struts2就收到了HTTP请求。通过Struts的内部处理机制,它会判断这个HTTP请求是否与某个Action对象相匹配,如果找到了与这

匹配的Action,就调用Actoin对象的execute()方法,并根据处理结果返回相应的值,然后Strut2就会通过Action的返回值查找返回值所

映射的页面,最后通过一定的视图回应给浏览器。

 

四、动态Action

  前面用到的Action对象,都是通过重写execute()方法实现对浏览器请求处理,一个Action处理多个用户请求

 

五、动态Action的应用

public class UserAction extends ActionSupport{

  private String info;

  //添加用户信息

  public String add() throws Exception{

    info="添加用户信息";

    return "add"

  }

  public String update() throws Exception{

    info="更新用户信息";

    return "update";

  }

  public String getInfo(){

    return info;

  }

  public void setInfo(String info){

    this.info = info;

  }

}

struts.xml

 <struts>
    <!-- 声明包 -->
    <package name="myPackage" extends="struts-default">
        <!-- 定义action -->
        <action name="userAction" class="com.lyq.action.UserAction">
            <result name="add">user_add.jsp</result>
            <result name="update">user_update.jsp</result>
        </action>
    </package>
</struts>

user_add.jsp

<body>

  <font color="red">

    <s:property value="info"/>

  </font>

</body>

user_upate.jsp

<body>

  <font color="red">

    <s:property value="info"/>

  </font>

</body>

idex.jsp

<body>

  <a href="userAction!add">添加用户</a>

  <a href="userAction!update">更新用户</a>

</body>