概要
ここでは、Spring MVCに特化した設定の主なものを見ていきましょう。
Spring MVCで用意しているクラス
以下の設定があります。設定はそのままSpringが提供している機能と読み替えても良いです。
すべてinterfaceになっていますので、Javadocでインターフェースの派生クラスを確認すれば、利用できるクラスが分かります。
また、以下のクラスに共通する動作として、複数設定できることと、優先順位が付けられることがあげられます。
優先順位の高いクラスで解決できない場合、次の優先順位のクラスが解決しようとします。
【beanで設定するクラスの一覧】
名称 | 内容 |
handler mappings | インターセプターとControllerの実行を担当するクラスです。 通常、何も設定しなければAnnotationMethodHandlerAdapterが使用されます。 |
view resolvers | View名からViewを検索するクラスです。 例えばUrlBasedViewResolverを使用すると、 prefix + View名 + suffix のJSPファイルを検索します。 |
locale resolver | ロケール(例:"ja"など)を設定するクラスです。 |
Theme resolver | theme名を解決します。themeとは、CSSのクラス名や、イメージファイル名などを指します。使用することで、後で、一括して変更できるようにもなります。 propertiesファイルに、 background=/themes/cool/img/coolBg.jpg と記述して、JSPファイルなどで、 style="background=<spring:theme code='background'/>" のような使い方をします。 |
multipart file resolver | ファイルアップロードの方法を提供します。利用したい時だけ設定すれば大丈夫です。 |
handler exception resolvers | 例外処理の方法を提供します。利用したい時だけ設定すれば大丈夫です。 |
Spring MVCで用意しているmvc:タグ
Spring MVCでは、上記のbeanで記述する設定の他に、mvcタグが用意されています。
それを見てみましょう。
mvc:annotation-driven
このタグは、 DefaultAnnotationHandlerMapping と AnnotationMethodHandlerAdapterを登録します。
これらはSpring MVCが@Controllerにリクエストを送るのに必要なものです。
このタグはこれら2つのbeanを、あなたのクラスパスに存在しているものをベースに適切なデフォルト設定をします。
1.Spring3のConversionServiceをサポートします。加えて、データのバインド処理中のJavaBeanのPropertyEditorをサポートします。
org.springframework.format.support.FormattingConversionServiceFactoryBeanが提供するConversionServiceがデフォルトで使用されます。
ConversionServiceは、conersion-service属性で上書きできます。
2.@NumberFormat アノテーションをつけた数値フィールドを書式変換する機能をサポートします。
3.もし、クラスパスにJodaTime1.3以上があれば、@DateTimeFormatアノテーションをつけたDate,Clendar、Long、JodaTimeのフィールドを書式変換する機能をサポートします。
4.もし、クラスパスにJSR-303 Providerが存在すれば、@Validをつけた入力(メソッドの引数や、フィールドの値)を妥当性チェックする機能を提供します。
これは@Controllerに対する機能です。妥当性チェックの動作は、validator属性を設定することで、明示的に変更できます。
5.JAXBがクラスパスに存在すれば、XMLを読み書きする機能を提供します。
6.Jacksonがクラスパスに存在すれば、JSONを読み書きする機能を提供します。
mvc:interceptors
WebRequestInterceptorsか、自作のインターセプターを登録します。
基本的にはすべてのリクエストに適用されるものですが、適用するURLを指定することもできます。
【URL指定の記述例】
<mvc:interceptors>
<mvc:interceptor>
<mapping path="/secure/*"/>
<bean class="org.example.SecurityInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
mvc:view-controller
このタグは、内部でParameterizableViewControllerクラスを呼び出しています。
これは静的なHTMLのようなケースで使用するControllerです。(つまり、Controllerの処理を実行しないようなケース)
Viewの解決は、UrlBasedViewResolverがDIコンテナに設定してあると、それを使用するようです。
【記述例】
<mvc:view-controller path="/" view-name="home"/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
【path属性】
このControllerを適用するパスを指定します。
*のようなワイルドカードも使用できます。
【view-name属性】
省略できます。JSPファイルの名前にあたる部分を指定ます。
この属性を省略した場合は、例えば"/
foo/bar.html" にアクセスしたとき、 "foo/bar"に変換されてviewResolverに渡されます。
mvc:resources
ResourceHttpRequestHandlerが提供する機能で、CSSや画像などの静的なリソースを扱います。
ブラウザが特定のURLをリクエストしたときに、jarやクラスパス内にあるリソースを返します。(WebContents配下ではなく)
cache-periodは、有効期限に未来の日付を設定できます。1年を設定することを推奨しています。
有効期限はクライアントが効率化のために使用します。
このハンドラは、Last-Modifiedヘッダも同様に適切に扱います。
【記述例】
<mvc:resources mapping="/resources/**" location="/public-resources/" cache-period="31556926"/>
Created Date: 2012/04/08