2.2. Spring MVCアーキテクチャ概要¶
Caution
本バージョンの内容は既に古くなっています。最新のガイドラインはこちらからご参照ください。
目次
Spring MVCは、公式で以下のように説明されている。
Spring’s web MVC framework is, like many other web MVC frameworks, request-driven, designed around a central Servlet that dispatches requests to controllers and offers other functionality that facilitates the development of web applications. Spring’s DispatcherServlet however, does more than just that. It is completely integrated with the Spring IoC container and as such allows you to use every other feature that Spring has.
2.2.1. Overview of Spring MVC Processing Sequence¶
リクエストを受けてから、レスポンスを返すまでのSpring MVCの処理フローを、以下の図に示す。
DispatcherServlet
が、リクエストを受け取る。DispatcherServlet
は、リクエスト処理を行うController
の選択を、HandlerMapping
に委譲する。HandlerMapping
は、リクエストURLにマッピングされているController
を選定し、(Choose Handler)
,Controller
をDispatcherServlet
へ返却する。DispatcherServlet
は、HandlerAdapter
に対して、Controller
のビジネスロジック処理の実行を委譲する。HandlerAdapter
は、Controller
のビジネスロジック処理を呼び出す。Controller
は、ビジネスロジックを実行し、処理結果をModel
に設定し、ビューの論理名をHandlerAdapter
に返却する。DispatcherServlet
は、ビュー名に対応するView
の解決を、ViewResolver
に委譲する。ViewResolver
は、ビュー名にマッピングされているView
を返却する。DispatcherServlet
は、返却されたView
に、レンダリング処理を委譲する。View
は、Model
が持つ情報をレンダリングして、レスポンスを返却する。
2.2.2. Implementations of each component¶
これまで説明したコンポーネントのうち、拡張可能なコンポーネントを紹介する。
2.2.2.1. Implementaion of HandlerMapping¶
Springから提供されているHandlerMapping
のクラス階層を、以下に示す。
通常使用するのは、
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
であり、このクラスはBean定義されている
Contorller
から、@RequestMapping
アノテーションを読み取り、URLと合致する
Controller
のメソッドを、Handlerクラスとして扱うクラスである。Spring3.1からは、
RequestMappingHandlerMapping
は、DispatcherServlet
が読み込むBean定義ファイルに、<mvc:annotation-driven>
の設定がある場合、デフォルトで設定される。(
<mvc:annotation-driven>
アノテーションで有効になる設定は、Web MVC frameworkを参照されたい。)2.2.2.2. Implementaion of HandlerAdapter¶
Springから提供されているHandlerAdapter
のクラス階層を、以下に示す。
通常使用するのは、
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
である。こちらもSpring3.1からは、
<mvc:annotation-driven>
の設定がある場合、デフォルトで設定される。RequestMappingHandlerAdapter
は、HandlerMapping
によって、選択されたハンドラークラス (Controller
) のメソッドを呼び出すクラスである。2.2.2.3. Implementaion of ViewResolver¶
Springおよび依存ライブラリから提供されているViewResolver
のクラスを、以下に示す。
通常(JSPを使う場合)は、
org.springframework.web.servlet.view.InternalResourceViewResolver
を使用するが、
テンプレートエンジンTilesを使う場合は、
org.springframework.web.servlet.view.tiles2.TilesViewResolver
ファイルダウンロード用にストリームを返す場合は
org.springframework.web.servlet.view.BeanNameViewResolver
のように、返すView
によって、使い分ける必要がある。
複数の種類の
View
を扱う場合は、ViewResolver
の定義が、複数必要となるケースがある。複数の
ViewResolver
を使う代表的な例としては、ファイルのダウンロード処理が存在する画面アプリケーションである。画面(JSP)は、
InternalResourceViewResolver
で、View
を解決し、ファイルダウンロードは、
BeanNameViewResolver
などを使って、View
を解決する。詳細は、ファイルダウンロードを参照されたい。
2.2.2.4. Implementaion of View¶
Springおよび依存ライブラリから提供されているView
のクラスを、以下に示す。
View
は、返したいレスポンスの種類によって変わる。JSPを返す場合は、
org.springframework.web.servlet.view.JstlView
が使用される。Springおよび依存ライブラリから提供されていない
View
を扱いたい場合は、View
インタフェースを実装したクラスを、拡張実装する必要がある。詳細は、ファイルダウンロードを参照されたい。