问题的简短版本:什么会导致Scalatra /(Jetty或Tomcat)在不设置请求属性“javax.servlet.error.exception”的情况下将执行传递给ErrorHandler的处理?
更长的上下文:在我最近加入的一个项目中,ErrorHandlers 的句柄方法具有单独的块,用于处理来自“javax.servlet.error.exception”请求属性和所有其他异常的异常。我们在 Jetty 中运行我们的应用程序,据我了解,Jetty 解开 ServletExceptions 并将它们放在上面的属性中。什么会导致处理非“javax.servlet.error.exception”异常的块被调用呢?还是它是多余的并且可以删除?
最初编写代码的人离开了项目。技术堆栈的其余部分是 Scala 和 Scalatra,如果它有什么不同的话。
Option(request.getAttribute("javax.servlet.error.exception"))
.map {
exception => exception match {
//various exceptions handled
}.getOrElse(handleStatusCode(currentStatus))
编辑:似乎在某些环境中,代码在 Tomcat 上运行。