Struts2 为什么我的自定义拦截器不工作
我定义了一个用于记录时间的自定义拦截器,但它不起作用。 以下是我的自定义拦截器代码:Struts2 为什么我的自定义拦截器不工作,struts2,interceptor,interceptorstack,Struts2,Interceptor,Interceptorstack,我定义了一个用于记录时间的自定义拦截器,但它不起作用。 以下是我的自定义拦截器代码: public class TimeConsumedInterceptor extends AbstractInterceptor { /* * {@inheritDoc} */ @Override public String intercept(ActionInvocation invocation) throws Exception { long start = System.currentTi
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
package下)
error.jsp
和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 interceptorList=new ArrayList(proxy.getConfig().getInterceptors())
,proxy.getConfig().getInterceptors()
返回struts-default.xml中定义的defaultStack的18个拦截器,我的ecsTimer拦截器不在其中。那为什么呢?我的配置有问题吗?谢谢。正在为每个操作执行创建DefaultActionInvocation
。您只需要执行使用自定义拦截器配置的操作,就可以在调试中看到它
顺便说一句,已经有
计时器拦截器可以满足您的需要。我使用struts注释,我只是按照您说的做,@ParentPackage(value=“json default”)@Namespace(value=“/manager”)@InterceptorRef(value=“ecsStack”)公共类UserSearchAction扩展了ActionSupport
。。。,现在它报告了一个错误:找不到引用名ecsStack-[未知位置]引用的拦截器类。那么如何解决呢?这个拦截器类确实存在。我解决了它,请参阅。我认为struts2注释比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>