サーブレットを使用して単純なWebアプリケーションのエラーを処理しようとしていますが、web.xmlでexception-typeで特に定義されているエラーに対しては非常にうまく機能しています。ただし、HttpServletResponse.sendErrorメソッドを使用してHTMLエラーコードを送信しようとすると、web.xmlはエラーを検出しないようで、その特定のHTMLステータスコードに対するTomcatのデフォルトのエラーページを表示するだけです。
私のエラー処理サーブレットには、特定のエラーコードと一致しない場合に生成される、いくつかの「キャッチオール」汎用エラーページがあります。そのため、エラーはサーブレットに到達していません。なぜこのように動作しているのですか。
これが私のweb.xmlからの関連するスニペットです:
<error-page>
<error-code>400</error-code>
<location>/Error</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/Error</location>
</error-page>
そして、これがサーブレットで送信しようとしているエラーの例です。
if (thing.getSizeOfThing() == null || thing.getQuantity() <= 0) {
response.sendError(400);
}
エラー処理サーブレットは、エラーコードまたは例外タイプ、およびエラーを生成したサーブレットに基づいて、関連するエラーページを表示します。前述したように、これは例外に対してはうまく機能し、sendErrorメソッドを使用して送信されたエラーに対してはまったく機能しません。
ブラウザ固有のエラーページではなく、Tomcatの一般的な400エラーページが表示されるため、応答の最小コンテンツサイズの問題が問題ではない(または発生してはならない)ことを確認しました。
どんな助けでも大歓迎です!