服务器抛出异常时如何避免用户获得500个错误

Tho*_*ian 3 security error-handling exception xpages

我在服务器日志中收到以下错误.

  • 2012-03-06 09:20:43 HTTP JVM:CLFAD0211E:抛出异常.有关更多详细信息,请参阅位于D:/ Lotus/Domino/data/domino/workspace/logs中的error-log-0.xml
  • 2012-03-06 09:20:43 HTTP JVM:CLFAD0229E:发生安全异常服务请求:/demo.nsf/home.xsp - HTTP代码:500.有关更多详细信息,请参阅error-log-0.xml位于D:/ Lotus/Domino/data/domino/workspace/logs

用户只能在webbrowser(源代码)中看到这个

<html>
<head>
<title>Error</title></head>
<body text="#000000">
<h1>Error 500</h1>HTTP Web Server: Command Not Handled Exception</body>
</html>
Run Code Online (Sandbox Code Playgroud)

所以我可以通过服务器日志告诉服务器上有一个安全异常,可能是因为我的java.policy文件中的设置有错误.但我的问题不是导致错误的原因,而是如何避免用户遇到这些丑陋的500错误.

我想将我在应用程序中设置的错误页面呈现给用户,就像任何其他异常一样.

可能?

stw*_*sel 5

即使您定义了错误页面,也会有许多错误"突破".例如,当您将控件拖到自身上时.安全似乎是另一个领域 所有这些都是你应该在开发中处理的东西.我没有看到"通常"发生的错误(开发完成后的真正运行时和测试类型的错误)转义自定义错误页面.除此之外,遵循Declan的建议.


Tim*_*ony 5

你的代码中的try/catch块越多越好(理所当然):

try {
 // code that might throw an error
} catch (e) {
 // examine the error to see if there's a workaround
 // if not, log it and inform the user
} finally {
 // any code that needs to run whether or not there was an error
}
Run Code Online (Sandbox Code Playgroud)

这样一旦失败,它就会优雅地失败.只要确保向用户明确说明出现了问题(并且,最好是向他们提供他们实际可以跟进的说明)...如果出现问题并且用户认为出现问题,则默默地失败甚至会比丑陋的错误页面更糟糕一切都很好.

PS正如斯蒂芬所指出的,有些错误根本无法捕获.例如,如果XPage没有被有权运行XPage的人签名,它甚至都没有尝试运行你的代码...页面本身是无效的,所以在运行时你无能为力.始终确保在部署期间签署了XPage.