Spring MVC には、ビュー関連で 2 種類のインターフェース“ViewResolver”と“View”が用意されています。
Spring Framework Reference Documentation 3.1の16.5 Resolving viewsによると、コントローラがディスパッチャーに投げたビュー名と実際のビュー(リソース)、所謂テンプレートファイルのマッピングを行うのがView resolver、ビューをレンダリングする機能へのリクエストを準備して、渡す役割を果たすのがViewと呼ばれるインターフェースです。
View resolver, View共に対象とするビュー技術(JSP, Velocity, FreeMaker, XSLTなど)に応じた実装クラスが用意されています。
今回は JSP と JSTL でやってみようと思っているので、[servlet-name]-servlet.xml に以下のような感じで InternalResourceViewResolver のビーンを登録しました。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
:
中 略
:
<!-- View Resolver -->
<bean id="internalResourceViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:viewClass="org.springframework.web.servlet.view.JstlView"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp"/>
</beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
:
中 略
:
<!-- View Resolver -->
<bean id="internalResourceViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:viewClass="org.springframework.web.servlet.view.JstlView"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp"/>
</beans>
InternalResourceViewResolver は UrlBasedViewResolver のサブクラスです。これが示唆するとおり、ビュー名を対応するビューリソースの URL に解決します。ビュー名として直接 URL を指定することも可能ですが、URL の一部をアプリケーション内でユニークなビュー名として使用し、これを URL に変換するルールを指定することもできます。
今回は internalResourceViewResolverビーンのプロパティviewClassで、ビュークラスとして JstlView を使用することを指定しています。また、prefix と suffix にある通り、/WEB-INF/jsp/ というフォルダーに .jsp という拡張子で JSP ファイルを配置することを指示しています。
Spring Framework では、ビーン定義中にプロパティを設定するとインスタンス化した際に、対応するクラスのセッターメソッド――この場合は InternalResourceViewResolver クラスの setViewClass と setPrefix, setSuffix――を介して値が反映される点が便利です。
尚、UrlBasedViewResolver では、2つの特別なプリフィックスがサポートされています。一つは URL リダイレクトを指示する“redirect:”、もう一つが URL フォワードを指示する“forward:”。ビュー名にこれらのプリフィックスが付いていた場合は、ViewResolverに設定された標準ルールより、優先して処理されます。
プロトタイプ
先日のダミー要件(※「難しいことは後回し」参照)に従って、PHP と作り置きの CSS、JavaScript をかき集めて、動く登録画面を作ってみました。割といい感じなのでこれをもとに JSP を作ろうと思います。
0 件のコメント:
コメントを投稿