검색결과 리스트
MultiActionController에 해당되는 글 1건
- 2007.06.03 Spring 에서 MultiActionController 사용하기 29
Controller 만 상속해서 사용하려니 Controller 가 너무 많아지는 경항이 있다..
이렇게되면 bean 설정도 많아지고 또 복잡해 지게된다.
이런걸 해결하기위해 MultiActionController 가 나왔다.
로직이 비교적간단한 것들을 모두 하나의 Controller 로 만드는건 귀찮은 작업이 아닐수 없다.
이럴땐 하나의 Controller 를 만들어서 MultiActionController 를 상속한다음 메소드별로 기능을 부여할수가 있다.
먼저 Controller 파일은 아래와같이 만든다.
[code]package dic.controllers;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
public abstract class DicSuperMultiActionController extends MultiActionController{
public ModelAndView others(HttpServletRequest request, HttpServletResponse response) throws Exception {
String contextPath = request.getContextPath();
String uri = request.getRequestURI();
String viewName = uri.substring(contextPath.length()+1,uri.lastIndexOf("."));
return new ModelAndView(viewName);
}
}[/code]
MultiActionController 는 abstract 메소드가 없기때문에 구현해야할 메소드가 없다.
대신 bean 설정에서 methodNameResolver 를 셋팅 해줘야 한다.
MultiActionController 의 최상위 클래스로 others 메소드만 구현하고 있다.
이 메소드는 MultiActionController 로 넘어왔는데 해당 메소드가 없으면 이쪽으로 맵핑되도록 한것이다.
다음으로 bean 설정이다.
[code] <bean id="dicSuperMultiActionController" class="dic.controllers.DicSuperMultiActionController" abstract="true"/>
<bean id="adminAuthMultiActionController" class="dic.controllers.AdminAuthMultiActionController" parent="dicSuperMultiActionController">
<property name="authDao" ref="authDao" />
<property name="methodNameResolver">
<ref local="adminAuthMultiActionControllerMethodNameResolver"/>
</property>
</bean>
<bean id="adminAuthMultiActionControllerMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
<property name="mappings">
<props>
<prop key="/**/*.do">others</prop>
<prop key="/admin/auth/list.do">list</prop>
<prop key="/admin/auth/modify.do">view</prop>
<prop key="/admin/auth/modify_action.do">modify</prop>
<prop key="/admin/auth/insert_action.do">insert</prop>
<prop key="/admin/auth/delete_action.do">delete</prop>
</props>
</property>
</bean>
<bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/**/*.do">defaultController</prop>
<prop key="/admin/login.do">adminLoginController</prop>
<prop key="/admin/logout.do">adminLogoutController</prop>
<prop key="/admin/auth/*.do">adminAuthMultiActionController</prop>
</props>
</property>
</bean>[/code]
위와같이 Controller 자체에 PropertiesMethodNameResolver 를 셋팅해서 넘어오는 값에따라 메소드로 분기를 시켜줄수 있다.
오버로딩된 others 메소드를 위에서처럼 이용하면 Controller 가 지정되어있지 않은 요청은 알아서 others 로 가게 된다.
Spring 에서 JUnit 로 테스트하기 (733) | 2007.06.10 |
---|---|
이거 이해가 안된다. (64) | 2007.06.09 |
Spring 에서 properties 파일 다루기. (33) | 2007.06.01 |
Spring jsp 예외처리 전략 (20) | 2007.05.30 |
Spring 의 exception 처리 전략 (26) | 2007.05.29 |
RECENT COMMENT