Java Struts 2-操作已执行异常

Java Struts 2-操作已执行异常,java,exception,struts2,struts,Java,Exception,Struts2,Struts,有时,在我的struts 2应用程序中会引发此异常。 我想复制的时候不能复制,它只是随机弹出 Struts has detected an unhandled exception: Messages: Action has already executed File: com/opensymphony/xwork2/DefaultActionInvocation.java Line number: 240 Stacktraces java.lang.IllegalStateEx

有时,在我的struts 2应用程序中会引发此异常。 我想复制的时候不能复制,它只是随机弹出

Struts has detected an unhandled exception:
Messages:   
Action has already executed
File:   com/opensymphony/xwork2/DefaultActionInvocation.java
Line number:    240

Stacktraces
java.lang.IllegalStateException: Action has already executed

com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:240)
xxx.yyy.zzz.qqq.ddd.interceptors.AuthInterceptor.invoke(AuthInterceptor.java:68)
xxx.yyy.zzz.qqq.ddd.interceptors.AuthCCareInterceptor.checkAuthenticateInvoke(AuthCCareInterceptor.java:142)
xxx.yyy.zzz.qqq.ddd.interceptors.AuthInterceptor.intercept(AuthInterceptor.java:59)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
java.lang.Thread.run(Thread.java:722)
对不起,“xxx.yyy.zzz.qqq.ddd”是机密信息。我相信你能理解


谢谢:-)

这三个拦截器中的一个可能已损坏:

interceptors.AuthInterceptor.invoke(AuthInterceptor.java:68)
interceptors.AuthCCareInterceptor.checkAuthenticateInvoke(AuthCCareInterceptor.java:142)
interceptors.AuthInterceptor.intercept(AuthInterceptor.java:59)

通过提供的信息显然无法告诉您更多信息。

问题是我们在拦截器中保存变量,例如调用的操作实例。重构后,一切都开始正常工作


拦截器必须是线程安全的(比如servlet)。

我想这可能是有原因的。如果它是一个坏掉的拦截器,我难道不能重现执行完全相同操作的错误吗?我想这取决于它是如何坏掉的。有很多活动部件,但由于我一直在使用S2,我从未见过这种情况——它当然可能是框架中的某些东西,但如果没有更多信息,我不知道如何找到。您认为哪种信息有助于识别问题?:-PNot sure--嗯,为什么AuthInterceptor会在跟踪中出现两次?我会非常仔细地检查通过这些拦截器的流程,确保它们是线程安全的,等等。做得好:)跟踪这种事情可能会让人沮丧。@miguel Ribeiro你说的重构是什么意思?我也遇到了同样的问题,你能详细说明一下吗?@miguel Ribeiro我确实使用了这个方法
invokeActionOnly()
效果很好。@Babel Uuh。。。这是很久以前的事了!我记得不太清楚,但我认为这与将action实例作为类变量保留在拦截器中有关。对不起,太有帮助了