使用 Struts2,您可以为特定类型定义全局异常映射。Exception
如果您为 java.lang.Exception 定义一个,它可以作为任何未映射到其他地方的异常的包罗万象:
<global-exception-mappings>
<exception-mapping exception="com.example.MyException result="myError" />
<exception-mapping exception="java.lang.Exception" result="error" />
</global-exception-mappings>
<global-results>
<result name="myError">/myError.jsp</result>
<result name="error">/error.jsp</result>
</global-results>
在您的错误 JSP (*) 中,您可以使用 log4j 记录它们并为您的用户提供一个很好的“出现问题”错误页面,而不会让他们面对令人困惑的堆栈跟踪。
(*) 更好:一个错误操作,您可以在其中记录异常,然后才让 Struts 呈现一个 JSP,您可以在其中告诉用户出现问题。无需使用日志记录代码使 JSP 混乱。
关于修改所有代码:
不要盲目地在代码中添加 catch 块——如果某些代码不能处理异常,就让它传播(throws
如果需要,在方法签名上添加一个子句)。在堆栈中的某些级别,考虑包装抛出的异常并添加一些信息来帮助识别原因并重新抛出它:
catch (IllegalArgumentException ex) {
// Always pass the original exception along, never just the message.
// It's much easier to find the root cause that way.
throw new UpdateException("Failed to parse foo object: " + foo, ex);
}
此外,抵制空捕获块的诱惑。他们吞下了异常,您可能永远不会发现您的应用程序中可能出现的问题或问题。记录所有异常,除非你非常确定你永远不会对它们感兴趣。