Struts2异常处理方式有两种;一种为全局异常映射,另外一种即为局部异常映射。
一、定义全局异常
在struts.xml文件中配置全局异常,通过<global-exception-mappings>标签下的<exception-mapping>进行配置;
<package name="commonStack" extends="struts-default">
<global-results>
<!--通resule的name来映射对应的页面-->
<result name="error">/jsp/common/error.jsp</result>
<global-results>
<global-exception-mappings>
<!--通过exception定义捕捉的异常类型,result返回对应的映射页面-->
<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
</package>
<global-result>下指定全局的视图映射,<exception-mapping>中的exception指定捕捉异常类型,也可以自定义异常;
二、定义局部异常
局部异常即用于捕获在具体哪个<action>中的异常,同样是通过<exception-mapping>来定义;通过exception来捕获对应的异常,result返回对应的异常页面;struts捕获异常时,先会在对应的<action>下找对应的局部异常,若同时存在该全局异常,会优先使用局部异常。result返回的页面也可以使用全局<global-result>下定义的映射页面。
<package name="exceptionTest" extends="commonStack" namespace="/exceptionTest">
<action name="qry" class="com.shcredit.controller.appkind.QryAction">
<exception-mapping exception="com.shcredit.controller.exception.MyException" result="error">
</exception-mapping>
<result name="error">/jsp/common/resubmit.jsp</result>
</action>
</package>
三、输出异常信息
在处理异常页面中使用:
<s:property value="exception"/> <!--输出异常对象本身-->
<s:property value="exceptionStack"/> <!--输出异常堆栈信息-->
小技巧:在JSP页面中可以使用<s:debug/>进行调试,可以查看Value Stack和Stack Context对象;