struts2 - 为什么我的自定义拦截器不起作用

标签 struts2 interceptor interceptorstack

我定义了一个用于记录时间的自定义拦截器,但它不起作用。 这是我的自定义拦截器代码:

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;
}

}

我定义了一个新的xml文件:ecs-default.xml(直接在src包下)

<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拦截器不在里面。所以为什么?我的配置有问题吗?谢谢。

最佳答案

正在为每个操作执行创建 DefaultActionInvocation。您只需执行使用自定义拦截器配置的操作即可在调试中查看它。

顺便说一句,已经有 timer 拦截器可以执行您想要的操作。

关于struts2 - 为什么我的自定义拦截器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15496455/

相关文章:

html - struts2 元素的布局页面出现不需要的边框

java - Struts2 填充 <s :property> tags in JSP page 的计时

java - SEAM:有效使用@BypassInterceptors?

java - 仅 REST - default-interceptor-ref 不起作用

java - 具有从数据库加载的字段选项并进行验证的表单

java - 从 Waffle/Pico 转换为 Struts2/Guice

java - 文件上传拦截器未在 Struts2 Maven 中上传任何文件

java - 在 session 期间更改 Hibernate Session.FlushMode

java - Struts 中拦截器没有被调用