1. 程式人生 > >深入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方法執行。