struts2 18拦截器详解(2)
struts2 18拦截器详解(二)exception拦截器exception拦截器对应的类为com.opensymphony.xwork2.interceptor
struts2 18拦截器详解(二)
exception拦截器
exception拦截器对应的类为com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor 该拦截器是struts2专门用于处理异常的,如果我们进行了异常配置,当struts2的执行出现异常后可以跳转到指定的Result,这也是struts2的异常处理机制。
下面看一下该拦截器的源码:
protected void publishException(ActionInvocation invocation, ExceptionHolder exceptionHolder) { invocation.getStack().push(exceptionHolder); }
该方法很简单,就是将抛出的异常包装进了一个叫ExceptionHolder类型的对象中,然后压入了值栈的栈顶,这样我们就可以是视图中获取异常信息(如果需要的话)。
最后讲一下匹配异常的细节,就是:if (exceptionClass.getName().contains(exceptionMapping))这个if条件判断,这样struts2判断有无匹配上用的是contains方法,即我们在配置异常映射的时候不需要将异常类名写全也可以,比如:
<exception-mapping result="error2" exception="java.lang.IndexOutOfBoundsException"/>我们配置成
<exception-mapping result="error2" exception="java.lang.IndexOutOf"/>也可以匹配上IndexOutOfBoundsException,这里个人觉得更好的做法应该是将所抛出的异常类的类名与配置异常映射判断是否相等,这样才更严谨,即contains方法改为equals方法。
到这里exception拦截器的工作原理与功能就讲解就结束......