06.設定ファイルについて (mvc:タグなど)
概要
Springの設定ファイル(DIコンテナ)の記述について見ていきます。
Springの設定ファイルの一般的な記述については以下の記事を参照ください
参照: 2.ApplicationContext.xmlファイルの記述方法
ここでは、Spring MVCに特化した設定の主なものを見ていきましょう。
Spring MVCで用意しているクラス
以下の設定があります。設定はそのままSpringが提供している機能と読み替えても良いです。
すべてinterfaceになっていますので、Javadocでインターフェースの派生クラスを確認すれば、利用できるクラスが分かります。
また、以下のクラスに共通する動作として、複数設定できることと、優先順位が付けられることがあげられます。
優先順位の高いクラスで解決できない場合、次の優先順位のクラスが解決しようとします。
【beanで設定するクラスの一覧】
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>
この場合、http://localhost:8080/sample/ へのリクエスト⇒ /WEB-INF/jsp/home.jspを返します(viewResolverの設定が反映されていることに注意)。
【path属性】
このControllerを適用するパスを指定します。
*のようなワイルドカードも使用できます。
【view-name属性】
省略できます。JSPファイルの名前にあたる部分を指定ます。
例: path="/login.html" view-name="zz" ⇒ http://localhost:8080/sample/login.html は、/WEB-INF/jsp/zz.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