AEM には、HTTP エラーを処理するための標準的なエラーハンドラーが付属しています。例えば、次のようなメッセージが表示されます。
エラーコードに応答するためにシステムが提供するスクリプト(/libs/sling/servlet/errorhandler
の下)が存在します。デフォルトでは、次のスクリプトが標準のCQインスタンスで使用できます。
AEMはApache Slingを基にしているので、Slingエラー処理の詳細については、https://sling.apache.org/site/errorhandling.htmlを参照してください。
オーサーインスタンスでは、CQ WCM Debug Filter がデフォルトで有効です。このフィルターは常に応答コード 200 を返します。デフォルトのエラーハンドラーは、応答に対してフルスタックトレースを書き込むことで応答します。
パブリッシュインスタンスでは、CQ WCM Debug Filter は、有効として設定されている場合も含めて常に無効になります。**
独自のスクリプトを作成して、エラーの発生時にエラーハンドラーで表示されるページをカスタマイズできます。カスタマイズしたページが/apps
の下に作成され、(/libs
の下の)デフォルトのページにオーバーレイされます。
詳しくは、オーバーレイの使用方法を参照してください。
リポジトリー内で、デフォルトスクリプトを次のようにコピーします。
/libs/sling/servlet/errorhandler/
/apps/sling/servlet/errorhandler/
コピー先のパスはデフォルトでは存在しないので、最初は作成する必要があります。
/apps/sling/servlet/errorhandler
に移動します。次のどちらかを実行します。
変更を保存し、テストします。
404.jsp および 403.jsp ハンドラーは、CQ5 認証に合わせて設計されています。特に、これらのエラーの発生時にシステムログインができるようになっています。
そのため、これらの 2 つのハンドラーを置き換える際には十分に気をつけて作業してください。
HTTP 500 エラーはサーバー側の例外によって発生します。
要求処理の結果例外が発生した場合、Apache Slingフレームワーク(AEMが構築されているフレームワーク):
例外をロギングします。
次を返します。
これらは応答の本文内で返されます。
エラーハンドラーで表示されるページをカスタマイズすることで、500.jsp
スクリプトを作成できます。ただし、このスクリプトが使用されるのは、HttpServletResponse.sendError(500)
が明示的に(例外キャッチャーから)実行される場合に限ります。
それ以外の場合は、応答コードは 500 に設定されますが、500.jsp
スクリプトは実行されません。
500 エラーを処理するには、エラーハンドラースクリプトのファイル名を例外クラス(またはスーパークラス)と同じにする必要があります。このような例外をすべて処理するには、スクリプト/apps/sling/servlet/errorhandler/Throwable.js
pまたは/apps/sling/servlet/errorhandler/Exception.jsp
を作成します。
オーサーインスタンスでは、CQ WCM Debug Filter がデフォルトで有効です。このフィルターは常に応答コード 200 を返します。デフォルトのエラーハンドラーは、応答に対してフルスタックトレースを書き込むことで応答します。
カスタムエラーハンドラーの場合、コード 500 を含む応答が必要です。そのため、CQ WCM Debug Filter を無効にする必要があります。そうすることで、応答コード 500 が返され、それによって正しい Sling エラーハンドラーがトリガーされます。
パブリッシュインスタンスでは、CQ WCM Debug Filter は、有効として設定されている場合も含めて常に無効になります。