如何在Struts 2中捕获默认拦截器堆栈抛出的异常?

问题描述:

没有为动作名称index映射的操作。如何捕捉异常,因为我想定义我的处理。如何在Struts 2中捕获默认拦截器堆栈抛出的异常?

com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:189) 
    org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61) 
    org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39) 
    com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58) 
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:475) 
    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) 
    com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129) 
    com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77) 
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.doFilter(StrutsPrepareFilter.java:82) 
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    com.zhanxiao.sys.PermissionFilter.doFilter(PermissionFilter.java:61) 
    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:169) 
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    org.apache.coyote.http11.AbstractHttp11Processor.proces 
+0

请更具体一点。 – NilsH 2013-04-25 11:47:46

+0

@NilsH我认为OP具有特定的标题,并且更具体地发布了堆栈跟踪。 – 2013-04-25 12:22:10

+1

那么,很高兴知道有人得到它然后:) – NilsH 2013-04-25 12:23:58

由于与请求一起使用的URL未正确映射到操作配置,因此引发了异常。为了摆脱异常,您应该正确地将URL映射到操作,或者使用缺省操作引用,如果没有找到给定URL的操作,将会调用默认操作引用。

即使使用正则表达式模式匹配器,您也可以使用通配符映射来映射一堆URL,这会找到您的动作,或者它无法通过提供您的自定义实现来覆盖动作映射器的默认行为。

要处理您的动作代码的异常,您可以在动作堆栈中使用exception interceptor。它将帮助您通过全局异常映射处理哪种异常,并定义实际处理异常的全局结果。请参阅详细说明以及示例如何使用异常处理来制作默认包的链接。

有一个选项可以扩展拦截器并覆盖异常处理机制,如文档中所述。

+0

感谢您的回答。 – Chd 2013-04-26 02:29:20

+0

你应该接受这个答案 – 2017-11-03 12:36:15