インターフェース AsyncHandlerInterceptor

すべてのスーパーインターフェース:
HandlerInterceptor
すべての既知の実装クラス:
WebRequestHandlerInterceptorAdapter

public interface AsyncHandlerInterceptor extends HandlerInterceptor
非同期リクエスト処理の開始後に呼び出されるコールバックメソッドで HandlerInterceptor を拡張します。

ハンドラーが非同期リクエストを開始すると、リクエスト処理の結果 (たとえば、ModelAndView) はまだ準備が整っておらず、別のスレッドから同時に生成される可能性が高いため、同期リクエストの場合と同様に、DispatcherServlet は postHandle および afterCompletion を呼び出さずに終了します。このようなシナリオでは、代わりに afterConcurrentHandlingStarted(HttpServletRequest, HttpServletResponse, Object) が呼び出され、実装は、スレッドをサーブレットコンテナーに解放する前に、スレッドにバインドされた属性をクリーンアップするなどのタスクを実行できます。

非同期処理が完了すると、リクエストはコンテナーにディスパッチされ、さらに処理されます。この段階で、DispatcherServlet は preHandlepostHandleafterCompletion を呼び出します。最初のリクエストと非同期処理完了後のディスパッチを区別するために、インターセプターは ServletRequest の jakarta.servlet.DispatcherType が "REQUEST" または "ASYNC" であるかどうかを確認します。

HandlerInterceptor 実装は、非同期リクエストがタイムアウトするか、ネットワークエラーで完了したときに機能する必要がある場合があることに注意してください。このような場合、サーブレットコンテナーはディスパッチしないため、postHandle および afterCompletion メソッドは呼び出されません。代わりに、インターセプターを登録して、WebAsyncManager の registerCallbackInterceptor および registerDeferredResultInterceptor メソッドを介して非同期リクエストを追跡できます。これは、非同期リクエスト処理が開始されるかどうかに関係なく、preHandle からのすべてのリクエストで事前に実行できます。

導入:
3.2
作成者:
Rossen Stoyanchev
関連事項:
  • 方法の概要

    修飾子と型
    メソッド
    説明
    default void
    afterConcurrentHandlingStarted(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 - エラーの場合