ビューリゾルバー
Spring MVC は ViewResolver および View インターフェースを定義し、特定のビューテクノロジーに縛られることなくブラウザーでモデルをレンダリングできるようにします。ViewResolver は、ビュー名と実際のビュー間のマッピングを提供します。View は、特定のビューテクノロジーに引き渡す前のデータの準備に対処します。
次の表に、ViewResolver 階層の詳細を示します。
| ViewResolver | 説明 |
|---|---|
|
|
| 明示的なマッピング定義なしで、論理ビュー名を URL に直接解決する |
|
|
|
|
| リクエストファイル名または |
| 現在のアプリケーションコンテキストでビュー名を Bean 名として解釈する |
ハンドリング
複数のリゾルバー Bean を宣言し、必要に応じて order プロパティを設定して順序を指定することにより、リゾルバーをチェーンで表示できます。順序プロパティが高いほど、後でビューリゾルバーがチェーンに配置されます。
ViewResolver の契約は、ビューが見つからなかったことを示すために null を返すことができることを指定しています。ただし、JSP と InternalResourceViewResolver の場合、JSP が存在するかどうかを判断する唯一の方法は、RequestDispatcher を介してディスパッチを実行することです。常にビューリゾルバーの全体的な順序で最後になるように InternalResourceViewResolver を構成する必要があります。
ビューリゾルバーの構成は、ViewResolver Bean を Spring 構成に追加するのと同じくらい簡単です。MVC 構成は、リゾルバーを表示およびコントローラーロジックなしの HTML テンプレートレンダリングに役立つロジックレスビューコントローラーを追加するための専用の構成 API を提供します。
リダイレクト
ビュー名の特別な redirect: プレフィックスを使用すると、リダイレクトを実行できます。UrlBasedViewResolver (およびそのサブクラス)は、これをリダイレクトが必要な命令として認識します。ビュー名の残りはリダイレクト URL です。
最終的な効果は、コントローラーが RedirectView を返した場合と同じですが、コントローラー自体が論理ビュー名の観点から動作できるようになりました。論理ビュー名(redirect:/myapp/some/resource など)は現在のサーブレットコンテキストに関連してリダイレクトし、redirect:https://myhost.com/some/arbitrary/path などの名前は絶対 URL にリダイレクトします。
フォワード
最終的に UrlBasedViewResolver およびサブクラスによって解決されるビュー名に特別な forward: プレフィックスを使用することもできます。これにより、RequestDispatcher.forward() を行う InternalResourceView が作成されます。このプレフィックスは InternalResourceViewResolver および InternalResourceView (JSP の場合)では有用ではありませんが、別のビューテクノロジーを使用しているが、リソースの転送をサーブレット / JSP エンジンで処理したい場合に役立ちます。代わりに、複数のビューリゾルバーチェーンを使用することもできます。
コンテンツネゴシエーション
ContentNegotiatingViewResolver (Javadoc) はビュー自体を解決するのではなく、他のビューリゾルバーに委譲し、クライアントがリクエストする表現に似たビューを選択します。表現は、Accept ヘッダーまたは照会パラメーター(たとえば、"/path?format=pdf")から判別できます。
ContentNegotiatingViewResolver は、各 ViewResolvers に関連付けられた View がサポートするメディア型(Content-Type とも呼ばれる)とリクエストメディア型を比較することにより、適切な View を選択してリクエストを処理します。互換性のある Content-Type を持つリストの最初の View は、表現をクライアントに返します。ViewResolver チェーンが互換性のあるビューを提供できない場合、DefaultViews プロパティを介して指定されたビューのリストが参照されます。この後者のオプションは、論理ビュー名に関係なく現在のリソースの適切な表現をレンダリングできるシングルトン Views に適しています。Accept ヘッダーにはワイルドカード(たとえば text/*)を含めることができます。その場合、Content-Type が text/xml である View は互換性のある一致です。