クラス AbstractController

実装されたすべてのインターフェース:
AwareApplicationContextAwareServletContextAwareController
既知の直属サブクラス
AbstractUrlViewControllerParameterizableViewControllerServletForwardingControllerServletWrappingController

public abstract class AbstractController extends WebContentGenerator implements Controller
テンプレートメソッドデザインパターンを使用した、コントローラー実装の便利なスーパークラス。

ワークフロー(およびインターフェースで定義されたもの) :

  1. handleRequest() は DispatcherServlet によって呼び出されます
  2. サポートされているメソッドのインスペクション (リクエストメソッドがサポートされていない場合は ServletException)
  3. セッションが必要な場合は、取得してみてください (ServletException が見つからない場合)
  4. cacheSeconds プロパティに従って、必要に応じてキャッシュヘッダーを設定します
  5. 抽象メソッド handleRequestInternal() を呼び出します(オプションで HttpSession の呼び出しを同期します)。これは、クラスを継承して実装し、実際の機能を提供して ModelAndView オブジェクトを返す必要があります。

公開された構成プロパティおよびインターフェースによって定義されたもの) :

名前 default 説明
supportedMethodsGET,POSTGET、POST、PUT など、このコントローラーでサポートされるメソッドのコンマ区切り(CSV)リスト
requireSessionfalse このコントローラーでリクエストを処理できるようにするためにセッションが必要かどうか。これにより、派生コントローラーは、null ポインターを恐れることなく、request.getSession() を呼び出してセッションを取得できるようになります。リクエストの処理中にセッションが見つからない場合、ServletException がスローされます
cacheSeconds-1 このリクエストに続くレスポンスのキャッシュヘッダーに含める秒数を示します。0(ゼロ)はキャッシュなしのヘッダーを含み、-1(デフォルト)はヘッダーを生成せ、正の数はコンテンツをキャッシュする秒数として示される量を示すヘッダーを生成します
synchronizeOnSessionfalse 同じクライアントからの呼び出しを直列化するために、handleRequestInternal の呼び出しを HttpSession の周囲で同期する必要があるかどうか。HttpSession がない場合、効果はありません。
作成者:
Rod Johnson, Juergen Hoeller, Rossen Stoyanchev
関連事項:
  • コンストラクターの詳細

    • AbstractController

      public AbstractController()
      HTTP メソッド GET、HEAD、POST をデフォルトでサポートする新しい AbstractController を作成します。
    • AbstractController

      public AbstractController(boolean restrictDefaultSupportedMethods)
      新しい AbstractController を作成します。
      パラメーター:
      restrictDefaultSupportedMethods - このコントローラーがデフォルトで HTTP メソッド GET、HEAD、POST をサポートする必要がある場合は true、制限されていない場合は false 
      導入:
      4.3
  • メソッドの詳細

    • setSynchronizeOnSession

      public final void setSynchronizeOnSession(boolean synchronizeOnSession)
      同じクライアントからの並列呼び出しを直列化するために、セッションでコントローラーの実行を同期する必要がある場合に設定します。

      より具体的には、このフラグが "true" の場合、handleRequestInternal メソッドの実行は同期されます。利用可能な最適なセッションミューテックスが同期に使用されます。理想的には、これは HttpSessionMutexListener によって公開されるミューテックスです。

      セッションミューテックスは、セッションのライフタイム全体を通じて同じオブジェクトであることが保証されており、SESSION_MUTEX_ATTRIBUTE 定数で定義されたキーで使用できます。これは、現在のセッションのロックを同期するための安全な参照として機能します。

      多くの場合、HttpSession 参照自体も、同じアクティブな論理セッションに対する常に同じオブジェクト参照になるため、安全なミューテックスです。ただし、これは異なるサーブレットコンテナー間では保証されません。唯一の 100% 安全な方法は、セッションミューテックスです。

      関連事項:
    • isSynchronizeOnSession

      public final boolean isSynchronizeOnSession()
      セッションでコントローラーの実行を同期するかどうかを返します。
    • handleRequest

      @Nullable public ModelAndView handleRequest(HttpServletRequestEE request, HttpServletResponseEE response) throws ExceptionSE
      インターフェースからコピーされた説明: Controller
      リクエストを処理し、DispatcherServlet がレンダリングする ModelAndView オブジェクトを返します。null の戻り値はエラーではありません。これは、このオブジェクトがリクエスト処理自体を完了したため、レンダリングする ModelAndView がないことを示しています。
      次で指定:
      インターフェース ControllerhandleRequest 
      パラメーター:
      request - 現在の HTTP リクエスト
      response - 現在の HTTP レスポンス
      戻り値:
      レンダリングする ModelAndView、または直接処理する場合は null 
      例外:
      ExceptionSE - エラーの場合
    • handleRequestInternal

      @Nullable protected abstract ModelAndView handleRequestInternal(HttpServletRequestEE request, HttpServletResponseEE response) throws ExceptionSE
      テンプレートメソッド。サブクラスはこれを実装する必要があります。契約は handleRequest と同じです。
      例外:
      ExceptionSE
      関連事項: