除了错误处理机制以外,一个表示层框架必须提供本地异常信息的显示和反馈机制。一个可行的方式是捕获实际的异常和错误内容到日志文件中然后发送一个有意义的信息帮助用户决定适当的操作。在jsp中没有捕获的异常,都将由jsp1.2规范定义的错误页面机制处理。类似的,在servlets中没有处理的异常将由web.xml定义的errorpage属性处理。struts提供了一个简单的机制,这个机制使用相同的错误页面机制处理jsp和servlet容器的未处理的异常。struts-config.xml文件例子略。
异常处理机制是建立在错误处理机制的基础上的,因此也是使用消息资源提供本地消息信息。下面的图示解释了struts涉及到异常处理机制的类关系。

分派的角色
就像在RequestProcessor一节讨论的一样,request processor调用request handler的execute方法。任何request handler抛出的异常都被RequestProcessor捕获然后在strutsconfig.xml中找到可能的匹配。RequestProcessor会调用ActionMapping.findException方法找到一个ExceptionConfig配置对象(是元素的运行时表现形式),它的类型属性匹配异常类型。如果找不到一个配置,findException方法会一直沿着超类找匹配到最顶层类的匹配。ActionMapping.findException会在本地范围和全局范围的ActionMapping对象搜索元素。下面是一个全局对象元素定义的例子略。
异常处理AppException
在request handlers中这是一个创建exceptions的基类。它封装了异常发生原因属性()和相关的ActionError对象。一个AppException的子类可以提供合适的构造函数,通过可选的属性名和对象参数,用消息key正确初始化对象。消息key可以从和异常对应的ExceptionConfig对象中获得。涉及到AppException的API是构造函数列表(可以被子类调用),AppException作为ExceptionHandler.execute的方法参数传递的。
转换异常到ActionErrors中
RequestProcessor查询ExceptionConfig的异常处理定义。RequestProcessor创建特定的ExceptionHandler并调用它的execute方法并传AppException作为参数。org.apache.struts.action.ExceptionHandler的一个默认的异常处理是预先配置在ExceptionConfig对象中的。ExceptionHandler从AppException对象获得ActionError对象,然后根据ErrorsTag创建ActionErrors对象使用。如果异常不是AppException类或其继承类,ExceptionHandler会用定义的元素创建一个ActionErrors对象。这样就减轻了请求处理的开发人员写额外的异常处理代码。然而这样就限制了框架仅能调用ActionError的一个构造函数,接收一个key参数值。如果需要可以用元素覆盖默认的异常处理。ExceptionHandler类或其子类会使用ExceptionConfig中的路径属性创建一个ActionForward对象。如果该路径没有定义,那么就会使用ActionMapping配置对象中的输入属性中定义的路径。ExceptionHandler也用Action.EXCEPTION_KEY保存原始的异常到请求对象中。一个视图可以用任何方式自由处理这个信息。Action.EXCEPTION_KEY也可以被servlet容器的错误页面机制使用来获得根据原始异常重新抛出的异常。