我们希望当程序出现特定的异常,就跳转到特定的页面。并且我们希望捕获异常,处理异常的代码出现在一个特定的文件中。由于Action接口能够抛出所有异常,因此重写该方法时无需任何异常处理,直接丢给Struts2框架就好。框架会根据xml文件配置的异常映射,转入到指定的视图资源。通过此方法,action中无需任何异常捕获,仅仅需要操作struts.xml。使用该机制需要打开异常映射功能,因此需要一个拦截器(默认的叫exception),而我们发现在default.xml中已经为我们打开了。


声明式异常捕获

异常处理机制通过在action中配置exception-mapping完成(或者在package下设置全局异常映射)。全局映射对所有action有效,而局部映射仅对该action有效。对于同样类型的异常,局部会覆盖全局。注意:全局异常不要使用局部结果,而局部异常可以使用全局结果。

<exception-mapping result="yichang" exception="java.sql.SQLException">
</exception-mapping>

result制定了输出异常信息的视图资源,而exception则表明了异常种类。通过如上配置,如果这个action中抛出了sql异常,那么架构就会自动跳转到yichang这个页面。在yichang这个页面,我们可以用struts2标签来输出异常信息。

<s:property value="exception"/>
<s:property value="exception.message"/>
<s:property value="exceptionStack"/>

上述三个struts2标签能够在视图页输出异常种类,自定义的异常信息,以及详细的异常堆栈信息。


参考文档:自定义异常