インターフェース AsyncHandlerInterceptor
- すべてのスーパーインターフェース:
HandlerInterceptor
- すべての既知の実装クラス:
WebRequestHandlerInterceptorAdapter
HandlerInterceptor を拡張します。 ハンドラーが非同期リクエストを開始すると、リクエスト処理の結果 (たとえば、ModelAndView) はまだ準備が整っておらず、別のスレッドから同時に生成される可能性が高いため、同期リクエストの場合と同様に、DispatcherServlet は postHandle および afterCompletion を呼び出さずに終了します。このようなシナリオでは、代わりに afterConcurrentHandlingStarted(HttpServletRequest, HttpServletResponse, Object) が呼び出され、実装は、スレッドをサーブレットコンテナーに解放する前に、スレッドにバインドされた属性をクリーンアップするなどのタスクを実行できます。
非同期処理が完了すると、リクエストはコンテナーにディスパッチされ、さらに処理されます。この段階で、DispatcherServlet は preHandle、postHandle、afterCompletion を呼び出します。最初のリクエストと非同期処理完了後のディスパッチを区別するために、インターセプターは ServletRequest の jakarta.servlet.DispatcherType が "REQUEST" または "ASYNC" であるかどうかを確認します。
HandlerInterceptor 実装は、非同期リクエストがタイムアウトするか、ネットワークエラーで完了したときに機能する必要がある場合があることに注意してください。このような場合、サーブレットコンテナーはディスパッチしないため、postHandle および afterCompletion メソッドは呼び出されません。代わりに、インターセプターを登録して、WebAsyncManager の registerCallbackInterceptor および registerDeferredResultInterceptor メソッドを介して非同期リクエストを追跡できます。これは、非同期リクエスト処理が開始されるかどうかに関係なく、preHandle からのすべてのリクエストで事前に実行できます。
- 導入:
- 3.2
- 作成者:
- Rossen Stoyanchev
- 関連事項:
方法の概要
修飾子と型メソッド説明default voidafterConcurrentHandlingStarted(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, ObjectSE handler) ハンドラーが同時に実行されている場合、postHandleおよびafterCompletionの代わりに呼び出されます。インターフェース HandlerInterceptor から継承されたメソッド
afterCompletion, postHandle, preHandle
メソッドの詳細
afterConcurrentHandlingStarted
default void afterConcurrentHandlingStarted(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, ObjectSE handler) throws ExceptionSE ハンドラーが同時に実行されている場合、postHandleおよびafterCompletionの代わりに呼び出されます。実装では、提供されたリクエストとレスポンスを使用できますが、ハンドラーの同時実行と競合する方法で変更しないでください。このメソッドの典型的な使用箇所は、スレッドローカル変数をクリーンアップすることです。
- パラメーター:
request- 現在のリクエストresponse- 現在のレスポンスhandler- 型および / またはインスタンスの検査のために、非同期実行を開始したハンドラー(またはHandlerMethod)- 例外:
ExceptionSE- エラーの場合