@FunctionalInterfaceSE public interface Controller
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.ApplicationContextAwareorg.springframework.context.ResourceLoaderAwareorg.springframework.web.context.ServletContextAwareこのような環境参照は、それぞれの認識インターフェースで定義された対応する setter を介して、テスト環境で簡単に渡すことができます。一般に、依存関係を可能な限り最小限に抑えることをお勧めします。たとえば、リソースのロードのみが必要な場合は、ResourceLoaderAware のみを実装します。または、WebApplicationObjectSupport 基本クラスから派生します。この基本クラスは、便利なアクセサーを介してすべての参照を提供しますが、初期化時に ApplicationContext 参照が必要です。
コントローラーは、HTTP キャッシングをサポートするために WebRequest で checkNotModified メソッドを使用できます。
SimpleControllerHandlerAdapter, AbstractController, MockHttpServletRequest, MockHttpServletResponse, ApplicationContextAware, ResourceLoaderAware, ServletContextAware, WebApplicationObjectSupport| 修飾子と型 | メソッドと説明 |
|---|---|
ModelAndView | handleRequest(HttpServletRequestEE request, HttpServletResponseEE response) リクエストを処理し、DispatcherServlet がレンダリングする ModelAndView オブジェクトを返します。 |
@Nullable ModelAndView handleRequest(HttpServletRequestEE request, HttpServletResponseEE response) throws ExceptionSE
null の戻り値はエラーではありません。これは、このオブジェクトがリクエスト処理自体を完了したため、レンダリングする ModelAndView がないことを示しています。request - 現在の HTTP リクエスト response - 現在の HTTP レスポンス null ExceptionSE - エラーの場合