首页 > 代码库 > 深入struts2.0(六)--ActionProxy类

深入struts2.0(六)--ActionProxy类

1.1     ActionProxy接口以及实现

ActionProxy在struts框架中发挥着非常重要的作用。通过webwork和xwork交互关系图可以看出,它是action和xwork中间的一层。 正因为ActionProxy的存在导致Action调用更加简洁。接下来我们一起研究下这个核心类。

1.1.1       ActionProxy接口方法


图 3.3.1 ActionProxy接口主要方法图

ActionConfig getConfig();该方法主要是获得创建ActionProxy类的action配置信息。getExecuteResult()方法就是判断执行后action后是否执行result. getInvocation()获得与ActionProxy相关联的ActionInvocation.

1.1.2       ActionProxy接口实现类


图 3.3.2 ActionProxy接口实现类图

根据命名就知道defaultActionProxy是默认的actionProxy代理。 对于MockActionProxy这个类笔者也不太明白,这个类在struts代码中也没有用。在API中也没有说明,根据字面意思,就是对ActionProxy一个简单实现。

1.1.3       DefaultActionProxy实现类

在dispatcher类中我们可以看到如下代码:

proxy.execute();

   

 表示将由ActionProxy代理类来执行action,所有action的主要执行方法就是actionProxy中的execute.

    public String execute() throws Exception {

        ActionContext nestedContext = ActionContext.getContext();

        ActionContext.setContext(invocation.getInvocationContext());

 

        String retCode = null;

 

        String profileKey = "execute: ";

        try {

            UtilTimerStack.push(profileKey);

 

            retCode = invocation.invoke();

        } finally {

            if (cleanupContext) {

                ActionContext.setContext(nestedContext);

            }

            UtilTimerStack.pop(profileKey);

        }

 

        return retCode;

    }

 

图 3.3.3 ActionProxy接口execute方法

首先把InvocationContext设置到ActionContext上下文中。然后调用InvocationContext中的invoke方法执行。