13.3.3. The MultiActionController
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>
<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와의 관계는 아래와 같습니다.