2008/04/09からのアクセス回数 9016
Convention over configurationは、日本語では「規約は設定に勝る」と訳されていますが、 設定に適切なデフォルト値を用意することによって、デフォルト値に沿った規約を守れば 面倒な設定が不要になるということです。
また、Configurationには配置という意味もあり、ディレクトリ構成やファイルの場所を規約 で定めることにより、適切なデフォルト値を用意することができることと重ね合わせている ように思えます。
Spring MVCでは、Model View Controllerにデフォルトの規約を用意しています。
HTTPのURLで指定された要求を規約に従って振り分けているのが、ControllerClassNameHandlerMapping クラスです。
例)WelcomeControllerなら/welcome*にマッピングされ、URLでは/welcome.htmlを指定します。
例)AdminControllerのloginメソッドの場合/admin/*にマッピングされ、URLでは/admin/login.htmlを指定します。
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の名前が明示的に指定されていない場合、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.html
のビュー名は、/WEB-INF/jsp/registration.jspとなります。
この記事は、
皆様のご意見、ご希望をお待ちしております。
}}