3

時間を記録するために使用されるカスタムインターセプターを定義しましたが、機能しません。これが私のカスタムインターセプターコードです:

public class TimeConsumedInterceptor extends AbstractInterceptor
{

/*
 * {@inheritDoc}
 */
@Override
public String intercept(ActionInvocation invocation) throws Exception
{
    long start = System.currentTimeMillis();
    String result = invocation.invoke();
    long end = System.currentTimeMillis();
    System.out.println("time consumed: " + (end - start));
    return result;
}

}

src新しいxmlファイルを定義します:ecs-default.xml(パッケージの直下にあります)

<struts>
<include file="struts-default.xml"></include>
<!-- ecs-default package is abstract -->
<package name="ecs-default" extends="struts-default" abstract="true">
    <interceptors>
        <interceptor name="ecsTimer" class="com.nader.interceptor.TimeConsumedInterceptor"></interceptor>

        <interceptor-stack name="ecsStack">
            <interceptor-ref name="ecsTimer"></interceptor-ref>
            <interceptor-ref name="defaultStack"></interceptor-ref>
        </interceptor-stack>
    </interceptors>
           <!-- default stack used for ecs-default package -->
    <default-interceptor-ref name="ecsStack"></default-interceptor-ref>

    <global-results>
        <result name="error">error.jsp</result>
    </global-results>

    <global-exception-mappings>
        <exception-mapping exception="java.lang.Exception" result="error" />
    </global-exception-mappings>

</package>
</struts>

およびstruts.xmlファイル:

<struts>
<include file="ecs-default.xml"></include>
  <!-- define two empty package, / and /manager, extends ecs-default package -->
<package name="default" namespace="/" extends="ecs-default">
</package>

<package name="manager" namespace="/manager" extends="ecs-default">
</package>

</struts>

コードをデバッグすると、com.opensymphony.xwork2.DefaultActionInvocationクラスでList<InterceptorMapping> interceptorList = new ArrayList<InterceptorMapping>(proxy.getConfig().getInterceptors());proxy.getConfig().getInterceptors()struts-default.xmlで定義されたdefaultStackの18個のインターセプターが返されますが、ecsTimerインターセプターは含まれていません。なぜ?構成に問題がありますか?ありがとう。

4

1 に答える 1

2

DefaultActionInvocation、アクションの実行ごとに作成されます。デバッグで表示するには、カスタムインターセプターで構成されたアクションを実行する必要があります。

timerところで、あなたが望むことをするインターセプターはすでにあります。

于 2013-03-19T10:20:50.470 に答える