2.2. Spring MVCアーキテクチャ概要¶
Spring MVCとは、Servlet APIをベースに構築されたフレームワークであり、リクエストによって実行するアクションを決定し処理の結果をHTMLとして返却するModel、View、Controlerを用いたアーキテクチャのことである。
詳しくは、Spring Framework Documentationを参照されたい。
2.2.1. Overview of Spring MVC Processing Sequence¶
リクエストを受けてから、レスポンスを返すまでのSpring MVCの処理フローを、以下の図に示す。
DispatcherServlet
が、リクエストを受け取る。DispatcherServlet
は、リクエスト処理を行うController
の選択をHandlerMapping
に委譲する。HandlerMapping
は、リクエストURLにマッピングされているController
を選定し(Choose Handler)
、Controller
をDispatcherServlet
へ返却する。DispatcherServlet
は、Controller
のビジネスロジック処理の実行をHandlerAdapter
に委譲する。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. Implementation of HandlerMapping¶
Springから提供されているHandlerMapping
のクラス階層を、以下に示す。
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
である。Contorller
から@RequestMapping
アノテーションを読み取り、Controller
のメソッドをHandlerクラスとして扱うクラスである。RequestMappingHandlerMapping
は、DispatcherServlet
が読み込むBean定義ファイルに、<mvc:annotation-driven>
の設定がある場合、デフォルトで設定される。<mvc:annotation-driven>
アノテーションで有効になる設定は、Spring Framework Documentation -Enable MVC Configuration-を参照されたい。)2.2.2.2. Implementation of HandlerAdapter¶
Springから提供されているHandlerAdapter
のクラス階層を、以下に示す。
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter
である。HandlerMapping
によって選択されたHandlerクラス(Controller
)のメソッドを呼び出すクラスである。<mvc:annotation-driven>
の設定がある場合、デフォルトで設定される。2.2.2.3. Implementation of ViewResolver¶
Springおよび依存ライブラリから提供されているViewResolver
のクラスを、以下に示す。
JSPを使う場合は、
org.springframework.web.servlet.view.InternalResourceViewResolver
Thymeleafを使う場合は、
org.thymeleaf.spring6.view.ThymeleafViewResolver
ファイルダウンロード用にストリームを返す場合は
org.springframework.web.servlet.view.BeanNameViewResolver
のように、返すView
によって使い分ける必要がある。
View
を扱う場合、ViewResolver
の定義が複数必要となるケースがある。ViewResolver
を使う代表的な例として、ファイルのダウンロード処理が存在する画面アプリケーションが挙げられる。InternalResourceViewResolver
でView
を解決し、ThymeleafViewResolver
でView
を解決し、BeanNameViewResolver
などを使ってView
を解決する。2.2.2.4. Implementation of View¶
Springおよび依存ライブラリから提供されているView
のクラスを、以下に示す。
View
は、返したいレスポンスの種類によって変わる。JSPを返す場合
org.springframework.web.servlet.view.JstlView
が使用されるThymeleafにより生成されたHTMLを返す場合
org.thymeleaf.spring6.view.ThymeleafView
が使用される。
View
を扱いたい場合、View
インタフェースを実装したクラスを拡張する必要がある。