質問の短いバージョン:リクエスト属性「javax.servlet.error.exception」を設定せずに、Scalatra/(Jetty または Tomcat) が実行を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 で実行されるようです。