インターフェース Controller
- すべての既知の実装クラス:
AbstractController
、AbstractUrlViewController
、ParameterizableViewController
、ServletForwardingController
、ServletWrappingController
、UrlFilenameViewController
- 関数インターフェース:
- これは関数インターフェースであるため、ラムダ式またはメソッド参照の割り当てターゲットとして使用できます。
HttpServlet
と同様に HttpServletRequest
および HttpServletResponse
インスタンスを受信するコンポーネントを表しますが、MVC ワークフローに参加できます。コントローラーは Struts Action
の概念に匹敵します。Controller インターフェースの実装は、アプリケーションのライフサイクル全体で複数の HTTP リクエストを処理できる、 再利用可能なスレッドセーフクラスである必要があります。コントローラーを簡単に構成できるようにするため、コントローラーの実装は JavaBeans であることが推奨されます(通常は JavaBeans です)。
ワークフロー
DispatcherServlet
は、リクエストを受信し、ロケールやテーマなどを解決するための作業を行った後、HandlerMapping
を使用してコントローラーの解決を試みます。コントローラーがリクエストを処理することが検出されると、検出されたコントローラーの handleRequest
メソッドが呼び出されます。配置されたコントローラーは、実際のリクエストを処理する責任があります。該当する場合 - 適切な ModelAndView
を返します。実際には、このメソッドは、リクエストをコントローラーに委譲する DispatcherServlet
の主要なエントリポイントです。
基本的に Controller
インターフェースの直接実装は HttpServletRequests を処理するだけで、ModelAndView を返す必要があり、DispatcherServlet によってさらに解釈されます。オプションの検証、フォーム処理などの追加機能は、AbstractController
またはそのサブクラスの 1 つを継承することで取得する必要があります。
設計とテストに関する注意事項
Controller インターフェースは、HttpServlet と同様に、HttpServletRequest および HttpServletResponse オブジェクトで動作するように明示的に設計されています。たとえば、WebWork、JSF、Tapestry とは対照的に、サーブレット API から自身を切り離すことを目的とはしていません。代わりに、サーブレット API のフルパワーを利用できるため、コントローラーを汎用にすることができます。コントローラーは、Web ユーザーインターフェースリクエストを処理できるだけでなく、リモートプロトコルを処理したり、オンデマンドでレポートを生成したりできます。
HttpServletRequest および HttpServletResponse オブジェクトのモックオブジェクトを handleRequest
メソッドのパラメーターとして渡すことで、コントローラーを簡単にテストできます。便宜上、Spring には、あらゆる種類の Web コンポーネントのテストに適していますが、特に Spring Web コントローラーのテストに適したサーブレット API モックのセットが付属しています。Struts アクションとは対照的に、ActionServlet またはその他のインフラストラクチャをモックする必要はありません。HttpServletRequest と HttpServletResponse をモックするだけで十分です。
コントローラーが特定の環境参照を認識する必要がある場合、Spring(Web)アプリケーションコンテキストの他の Bean ができるように、特定の認識インターフェースを実装することを選択できます。
org.springframework.context.ApplicationContextAware
org.springframework.context.ResourceLoaderAware
org.springframework.web.context.ServletContextAware
このような環境参照は、それぞれの認識インターフェースで定義された対応する setter を介して、テスト環境で簡単に渡すことができます。一般に、依存関係を可能な限り最小限に抑えることをお勧めします。たとえば、リソースのロードのみが必要な場合は、ResourceLoaderAware のみを実装します。または、WebApplicationObjectSupport 基本クラスから派生します。この基本クラスは、便利なアクセサーを介してすべての参照を提供しますが、初期化時に ApplicationContext 参照が必要です。
コントローラーは、HTTP キャッシングをサポートするために WebRequest
で checkNotModified
メソッドを使用できます。
メソッドのサマリー
修飾子と型メソッド説明handleRequest
(HttpServletRequestEE request, HttpServletResponseEE response) リクエストを処理し、DispatcherServlet がレンダリングする ModelAndView オブジェクトを返します。
メソッドの詳細
handleRequest
@Nullable ModelAndView handleRequest(HttpServletRequestEE request, HttpServletResponseEE response) throws ExceptionSE リクエストを処理し、DispatcherServlet がレンダリングする ModelAndView オブジェクトを返します。null
の戻り値はエラーではありません。これは、このオブジェクトがリクエスト処理自体を完了したため、レンダリングする ModelAndView がないことを示しています。- パラメーター:
request
- 現在の HTTP リクエストresponse
- 現在の HTTP レスポンス- 戻り値:
- レンダリングする ModelAndView、または直接処理する場合は
null
- 例外:
ExceptionSE
- エラーの場合