MultuActionController는 여러 개의 요청을 처리할 수 있는 컨트롤러로 요청을 특정 메소드로 매핑합니다. 이 때 메소드를 찾을 수 있도록 도와주는 세 개의 Resolver들이 있습니다.

먼저 MultiActionController 에 설정할 수 있는 속성들을 살펴보겠습니다.

  • methodNameResolver :: 사용 할 methodNameResolver를 등록합니다.
  • delegate :: you define a delegate object, on which methods resolved by the MethodNameResolver will be invoked.(영.. 해석이;;)

MultiActionController에 정의할 수 있는 메소드의 기본 형태는 아래와 같습니다.

public [ModelAndView | Map | void] anyMeaningfulName(HttpServletRequest, HttpServletResponse [, Exception | AnyObject]);

리턴타입은 세 가지가 있으며 인자로는 기본적으로 request와 reponse객체를 받으며 메소드에서 발생할 Exception을 처리할 메소드를 정의할 때 사용하며 AnyObject는 request가 바인딩 될 아무 타입의 객체나 사용할 수 있습니다.

다음은 MethodNameResolver 들을 살표보겠습니다.

  • ParameterMethodNameResolver :: request의 파라미터로 메소드를 맵핑합니다. 예를 들어 http://www.sf.net/index.view?testParam=testIt 이런 요청이 들어오면 testIt 메소드를 찾아서 호출합니다.
  • InternalPathMethodNameResolver :: request에서 파일이름에 해당하는 부분으로 메소드를 맵핑합니다. 예를 들어 http://www.sf.net/testing.view 요청이 들어오면 testing 메소드를 호출합니다.
  • PropertiesMethodNameResolver :: 사용자가 정해놓은 요청과(key)와 메소드(value)를 보토 판단합니다.

레퍼런스의 예제를 보겠습니다.

<bean id="propsResolver" class="org....mvc.multiaction.PropertiesMethodNameResolver">
  <property name="mappings">
    <value>
        /index/welcome.html=retrieveIndex
        /**/notwelcome.html=retrieveIndex
        /*/user?.html=retrieveIndex
    </value>
  </property>
</bean>

<bean id="paramMultiController" class="org....mvc.multiaction.MultiActionController">
    <property name="methodNameResolver" ref="propsResolver"/>
    <property name="delegate" ref="sampleDelegate"/>
</bean>

MultiActionController와 AbstractController 그리고 MethodNameResolver와의 관계는 아래와 같습니다.
사용자 삽입 이미지