Spring MVCのビュー解像器


一、ビュー解析器概要
Spring MVCでは、Controllerが要求処理結果をModelAndViewに入れた後、Displatch ServletはModelAndViewに基づいて適切なビューを選択してレンダリングする。Spring MVCではどのように適切なViewを選択しますか?Viewオブジェクトはどのように作成されましたか?答えはView Resoloverにあります。View ResoloverインターフェースはreverView Name方法を定義しています。view Nameによって適切なタイプのViewを作成して実現します。
ビュー解析器View Resoloverは、論理的なビュー名を真のビューとして解析することができます。ビュービュービューは、ビューを処理してクライアントに戻るためのものです。
Springデフォルトでは、多くのビュー解像器が提供されています。例えば、最もよく使われている解像度解析器InternalResource View Resoloverを使って、JSPビューを検索できます。通常、1つのビュー解析器は1つ以上の特定のタイプのビューしか検索できません。Springではサポートされていないビューやカスタムビューの検索ルールがある場合は、Springを拡張することによって、自分の必要なビュー解析器をカスタマイズすることができます。
二、Spring MVC対応のビュー解像器
常用ビューの解像度は以下の通りです。
1:Xml View Resolover:インターフェースView Resoloverの実現は、XMLプロファイルからビューを検索して実現されます(デフォルトXMLプロファイルは/WEB-INF/views.xml)。
2:Resource BundeleView Resolover:インターフェースView Resolaverの実現は、propertiesファイルからビューを検索するために使用されます。
3:UrlBasedViewResolover:インターフェースView Resoloverの実現は、要求されたURLパスに基づいて対応するビューを返すために必要であり、このビューは抽象的なAbstractUrl BasedViewの実現に必要であり、Internal Resource ViewやJstlViewなどのサブクラスもあります。
4:Internal Resource View Resolover:Url BasedView Resoloverのサブクラスは、一般的にJSPやJSTLなどのビューを検索するために使用されます。
5:VelocityView Resolover/Free MarkerView Resolover:UrlBasedView ResoloverのサブクラスはそれぞれVelocity(クラスVelocity View)とFreeMarkビュー(クラスFree Mark View)をサポートするために使用されます。
6:ContentNegotitwintingVieResolover:インターフェースView Resolaverの実装は、要求ファイルの拡張子または要求されたheaderのacceptフィールドに従ってビューを検索するために使用されます。
7:BenName ViewResolover:spring容器内を検索してViewインターフェースを実現したBeanを設定し、Beanの名前を論理ビュー名とします。
通常、InternalResource VieResoloverは、実際に開発されたものの中で最も一般的であるが、それを使用する場合、通常は最後に配置されている。このビュー解像器は正しいファイルが見つからなくても、nullに戻るのではなく、ビュー解像器より低い解像度で実行されないからである。
 
三、UrlBasedView Resolover
1、基本機能
UrlBasedViewResoloverは、View Resoloverに対して簡単に実現され、AbstractCachingViewResoliverを継承し、主にスティッチングURLを提供する方式でビューを解析します。prefix属性によってプレフィックスを指定し、suffix属性によってサフィックスを指定します。
2、AbstractCaching View Resolover紹介
これは抽象的なクラスで、解析したビューに対してキャッシュ機能を実現します。このように解析ビューの性能問題を最小限に抑えることができます。
3、リダイレクトと転送
URLがクライアントにジャンプする構成は、redirectです。戻るビュー名にredirect:プレフィクスを使用することができ、このようにクライアントでのジャンプをサポートすることができます。戻るビュー名が「redirect:login」である場合、URLBasedView Resolaverは、返ってくるビュー名に「redirect:」プレフィックスが含まれていることを発見しました。後は上に述べたように処理します。同じ理屈ではforward:プレフィクスでforwardジャンプを指定できます。
UrlBasedview Resoloverを使う時は属性view Classを指定しなければなりません。どのようなビューに解析するかを表します。一般的にはInternal Resource Viewを多く使って、jspを表現しますが、JSTLを使う時はJstlViewを使わなければなりません。
四、インターナショナルResource View Resolaver 
これは一番よく使われています。URLBasedView Resoloverのサブクラスですので、URLBasedView Resoloverのサポートの特性は全部サポートされています。戻ってきたビューの名前をすべてInternalResource Viewオブジェクトとして解析します。InternalResource Viewは、Controllerプロセッサ方法から返されるモデルの属性を対応するrequest属性に保存し、Request Displatchを通じてサーバ端で要求forwordを標的URLにリダイレクトします。
例:
<bean id= "defaultViewResolver"class= "org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name= "viewClass"value= "org.springframework.web.servlet.view.JstlView"/>
        <property name= "contentType" value= "text/html"/>
        <property name= "prefix" value= "/WEB-INF/jsp/"/>
        <property name= "suffix" value= ".jsp"/>
</bean>
五、ビュー解析器チェーン
1、Spring Web MVCでは複数のビュー解像度を同時に定義でき、それらはビュー解像度チェーンを構成する。Controllerプロセッサ方法が論理ビュー名に戻ると、ビュー解像器チェーンは、ビューResoloverの優先度に従って処理される。
2、優先度は、order属性によって順序を指定することができる。すべてのView ResoloverはOrderedインターフェースを実現していますので、order属性で順序を指定できます。デフォルトは最大値です。order属性はIntegerタイプで、orderが小さいほど優先度が高いです。
3、ビュー解析器チェーンの実行時、最初に解析を行うのはView Resolaverチェーンの中でorder値が一番小さいものです。もし一つのビュー解析器がビュー解析を行った後に戻ってくるViewオブジェクトがnullであれば、このビューの解析ができないということです。もし戻ってきたらnullできないなら、終わります。定義されたすべてのビュー解析器がこのビューを解析できない場合、異常を投げます。