struts2异常拦截器 global-results不起作用
配置文件:struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.devMode" value="true" />
<constant name="struts.custom.i18n.resources" value="i18n/Messages" />
<package name="crud-default" extends="struts-default" namespace="/">
<interceptors>
<interceptor name="exceptionManager" class="com.igames.fourd.aop.ExceptionInterceptor" />
<!-- 异常拦截器的拦截栈 -->
<interceptor-stack name="commonInterceptor">
<interceptor-ref name="exceptionManager" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<!-- 设置默认拦截器 -->
<default-interceptor-ref name="commonInterceptor" />
<global-results>
<result name="error">/commons/exception.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="error" exception="com.igames.fourd.exception.SystemException" />
<!-- <exception-mapping result="error" exception="
java.lang.Exception" />-->
</global-exception-mappings>
</package>
<include file="struts/struts-system.xml" />
</struts>
如果将<global-exception-mappings>中改为<exception-mapping result="error" exception="java.lang.Exception" />则能够进入到全局映射的result。
SystemException的定义为
public class SystemException extends
RuntimeException请大家帮忙分析一下!谢谢。
------解决方案--------------------继承Exception看看。
public class SystemException extends Exception
------解决方案--------------------
exceptionManager异常应该是异常的一种类型。
不用在commonInterceptor拦截器栈中引用,
因为defaultStack中异常处理的拦截器exception
如果业务中抛出exceptionManager异常,exception拦截器会处理转发到<global-exception-mappings>
中的result的。