日期:2014-05-17  浏览次数:20811 次

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的。