Spring Framework Reference Documentation 3.1 16.3 Implementing Controllers より
コントローラは、サービスインターフェースを介して定義するアプリケーションの振る舞いへのアクセスを提供する。コントローラーは、ユーザーの入力を解釈し、処理結果をモデルに変換する。このモデルは、ビューを介して最終的にユーザーに見せる形にレンダリングされる。Spring は、コントローラー作成の自由度を高めるために、非常に抽象的な方法でコントローラーを実装している。
つまり、クライアントからのリクエストに応じて、ビューインターフェースに食わせるためのモデルを作るのがコントローラーの役割ということです。最初(※「難しいことは後回し」参照)に以下のような要件を定義していました。
/welcome/** : 一般向けコンテンツ
/front/** : サービスコンテンツ
/account/* : アカウント関連の機能を提供(ログイン、アカウント作成)
/account/ajax/* : Ajaxで処理するアカウント関連の画面
なので、今回はこれらに対応するコントローラーと URL の紐付け規則を [servlet-name]-servlet.xml に定義します。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
:
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
:
中 略
:
<!-- Handler Mapping -->
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/account/ajax/**">ajaxAccountController</prop>
</props>
</property>
</bean>
:
中 略
:
<!-- Controller -->
<bean id="ajaxAccountController"
class="picboo.controller.AjaxAccountController">
</bean>
:
中 略
:
</beans>
<beans xmlns="http://www.springframework.org/schema/beans"
:
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
:
中 略
:
<!-- Handler Mapping -->
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/account/ajax/**">ajaxAccountController</prop>
</props>
</property>
</bean>
:
中 略
:
<!-- Controller -->
<bean id="ajaxAccountController"
class="picboo.controller.AjaxAccountController">
</bean>
:
中 略
:
</beans>
ControllerClassNameHandlerMapping は、HandlerMapping インターフェースの実装クラスで、コントローラービーンのクラス名に基づいて、URL とのマッピングを行います。
これを使うことで
/welcome/ → WelcomeController.class
/front/ → FrontController.class
/account/ → AccountController.class
という紐付けが行われます。
一方、クラスと URL の紐付けを明示的に行いたい場合に使うのが SimpleUrlHandlerMapping です。今回アカウント関連の中で Ajax を使いたい部分は、AjaxAccountController にまとめ、/account/ajax/ という URL でアクセスしたいと考えているので、AjaxAccountController ビーンの登録と、SimpleUrlHandlerMapping ビーンの mappings プロパティへの設定で、以下の紐付けを行いました。
/account/ajax/ → AjaxAccountController.class
ここまでで、リクエストをコントローラーで受ける部分、コントローラーの処理結果をビューにレンダリングさせる部分の設計ができました。
0 件のコメント:
コメントを投稿