假设项目为dao、service、web.action三层。正常的异常处理流程为,从底层dao开始向上抛,抛到上层service层后try-cache捕获处理。
web.action只负责调用服务service,本身不做业务,可将多个服务封装事务,该层的异常处理——可以try-cache自己捕获处理;可以继续上抛给struts2框架,但struts.xml内要配置global-exception-mappings捕获异常,并配置global-results映射异常到具体的显示页面。
<struts>
<package name="base" extends="struts-default">
// action未处理的异常会上抛给框架
<global-exception-mappings>
// exception,配置框架可捕获的异常,可直接来个Exception,什么都可以捕
// result,框架返回的结果字符串
<exception-mapping exception="....xxException" result="exception" />
....
</global-exception-mappings>
// 内层结果字符串无法匹配的,最后会在此匹配
<global-results>
// 配置框架异常后匹配的结果字符串,给出异常处理页面路径
<result name="exception">/WEB-INF/vm/exception/..</result>
....
</global-results>
....
</package>
</struts>