Spring-MVC/ステップ・バイ・ステップ

2008/04/09からのアクセス回数 8679

Spring-MVCの規約

Convention over configurationは、日本語では「規約は設定に勝る」と訳されていますが、 設定に適切なデフォルト値を用意することによって、規約を守ればデフォルト値によって 面倒な設定が不要になるということです。

また、Configurationには配置という意味もあり、ディレクトリ構成やファイルの場所を規約 で定めることにより、適切なデフォルト値を用意することができることと重ね合わせている ように思えます。

Spring MVCでは、Model View Controllerにデフォルト値の規約を用意しています。

Controllerのデフォルトマッピング

HTTPのURLで指定された要求を規約に従って振り分けているのが、ControllerClassNameHandlerMapping クラスです。

例)WelcomeControllerなら/welcome*にマッピングされ、URLでは/welcome.htmを指定します。
例)AdminControllerのloginメソッドの場合/admin/*にマッピングされ、URLでは/admin/login.htmを指定します。

Modelのデフォルトマッピング

ModelAndViewクラスは、オブジェクトに名前をづけしないで登録された場合、ModelMapクラスを使って自動的に生成されたkeyでオブジェクトを登録します。

プログラム例

    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {        
         User user = // get the User doing the shopping      
        ModelAndView mav = new ModelAndView("displayShoppingCart"); <-- the logical view name
        mav.addObject(user); <-- ここで、オブジェクト名が指定されていない
        return mav;
    }
例)x.y.Userのインスタンスが追加された場合、userがキーとなります。
例)java.util.HashMapの場合、hashMapがキーとなります。
例)x.y.Userの配列が追加された場合、userListがキーとなります。
例) x.y.User要素のjava.util.ArrayListが追加された場合、userListがキーとなります。
例)x.y.Foo要素のjava.util.HashSetが追加された場合、fooListがキーになります。

注意:空の配列、リスト、セットは登録されません。

Viewのデフォルトマッピング

viewの名前が明示的に指定されていない場合、DefaultRequestToViewNameTranslatorクラスがビューの 論理名を決定します。

Bean定義ファイルでviewNameTranslatorを指定します(マニュアルのTipにはDispatcherServletが自動的に配置してくれるとありますが...)。

    <!-- this bean with the well known name generates view names for us -->
    <bean id="viewNameTranslator" class="org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator"/>

    <bean class="x.y.RegistrationController">
        <!-- inject dependencies as necessary -->
    </bean>
    
    <!-- maps request URLs to Controller names -->
    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

ここで、以下のようなRegistrationControllerの場合

public class RegistrationController implements Controller {              
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {
        ModelAndView mav = new ModelAndView();// ビューの論理名が指定されていない!!
        // 必要に応じてモデルにオブジェクトを登録
        return mav;        
    }
}

ControllerClassNameHandlerMappingのマッピングキー(registration)がビューの論理名として使用されるので、 以下のURL

http://localhost:8080/registration.htm

のビュー名は、/WEB-INF/jsp/registration.jspとなります。

コメント

この記事は、

選択肢 投票
おもしろかった 2  
そうでもない 0  
わかりずらい 1  

皆様のご意見、ご希望をお待ちしております。


(Input image string)

}}


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
SmartDoc