Spring MVC - Controllers
프로그래밍/Spring MVC 2009. 12. 22. 00:16
Controllers
org.springframework.web.servlet.mvc.Controller
ModelAndView handleRequest( HttpServletRequest request, HttpServletResponse response) throws Exception;
- AbstractController, WebContentGenerator
기본적인 기능을 제공하기 위해서 Spring 에서 제공하는 다양한 Controller 는 AbstractController 를 상속한다.
Features offered by AbstractController
. supportedMethods : Controller 가 처리할 Http method 타입을 설정한다. ex> GET, POST ...
. requireSession : 요청을 처리하는데 Http Session 이 필요한지를 설정한다.
. synchronizeOnSession : Http Session 을 동기화할 필요가 있을때 사용한다.
. cacheSeconds : Http Response 를 캐쉬할 시간(초)를 설정한다. -1 은 설정하지 않음
. useExpiresHeader : Http 1.0 과 호환되는 Expires 헤더를 응답에 포함시킨다. 기본값은 true 이다.
. useCacheHeader : Http 1.1 과 호환되는 Cache-Control 헤더를 응답에 포함시킨다. 기본값은 true 이다.
AbstractController 를 상속하는 Controller 를 만들때는 handleRequestInternal(HttpServletRequest, HttpServletResponse) 메소드를 오버라이드 하면 된다.
package samples; public class SampleController extends AbstractController { public ModelAndView handleRequestInternal( HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav = new ModelAndView("hello"); mav.addObject("message", "Hello World!"); return mav; } }
<bean id="sampleController" class="samples.SampleController"> <property name="cacheSeconds" value="120"/> </bean>
- MultiActionController
org.springframework.web.servlet.mvc.multiaction.MultiActionController
Spring 은 하나의 Controller 에서 다양한 request 를 처리할 수 있도록 MultiActionController 를 제공한다. Struts 의 DispatchAction 과 비슷하다.
MultiActionController 에서 요청을 처리하기 위한 method 의 signatrue 는 아래와 같아야 한다.
public [ModelAndView | Map | void] anyMeaningfulName(HttpServletRequest, HttpServletResponse [,HttpSession] [,AnyObject])
ex> 예제
public ModelAndView displayCatalog(HttpServletRequest, HttpServletResponse)
public ModelAndView login(HttpServletRequest, HttpServletResponse, Login)
public ModelAndView viewCart(HttpServletRequest, HttpServletResponse, HttpSession)
public ModelAndView updateCart(HttpServletRequest, HttpServletResponse, HttpSession, Product)
public void home(HttpServletRequest, HttpServletResponse)
public Map list(HttpServletRequest, HttpServletResponse)
MethodNameResolver 는 request 를 처리할 MultiActionController 의 메소드를 결정하는데 사용된다.
Spring 에서는 다수의 MethodNameResolver 를 제공한다. 만약에 MethodNameResolver 를 선택하지 않았다면 기본으로 InternalPathMethodNameResolver 가 사용된다.
InternalPathMethodNameResolver 는 request url 의 마지막 filename 으로 request 를 처리할 method 를 결정한다.
ex> http://www.sf.net/test.view 요청이 들어왔을때 test(HttpServletRequest, HttpServletResponse) 메소드를 호출한다.
ParameterMethodNameResolver 는 parameter 에 설정된 method 를 request 를 처리할 method 를 결정한다.
ex> http://www.sf.net/index.view?method=testIt 요청이 들어오면 testIt(HttpServletRequest, HttpServletResponse) 메소드를 호출한다.
PropertiesMethodNameResolver 는 properties 에 설정한 request=method 맵핑 값으로 request 를 처리할 method 를 결정한다.
ex> /index/welcome.html=doIt 이 설정되어 있을 때 /index/welcome.html request 가 들어오면 doIt(HttpServletRequest, HttpServletResponse) 이 호출된다.
MultiActionController 의 설정 예제 1
<bean id="paramMultiController" class="org.springframework.web.servlet.mvc.multiaction.MultiActionController"> <property name="methodNameResolver"> <bean class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"> <property name="paramName" value="method"/> </bean> </property> <property name="delegate"> <bean class="samples.SampleDelegate"/> </property> </bean>
public class SampleDelegate { public ModelAndView retrieveIndex(HttpServletRequest req, HttpServletResponse resp) { return new ModelAndView("index", "date", new Long(System.currentTimeMillis())); } }
위에 정의한 SampleDelegate 객체가 MultiActionController 의 역할을 수행할 객체가 된다. Bean 설정을 보면 MethodNameResolver 로 ParameterMethodNameResolver 가 사용됬다. 또 ParameterMethodNameResolver 의 paramName 에 method 가 설정됬다. 따라서 request 가 method=retrieveIndex parameter 를 포함하게 되면 SampleDelegate 의 retriveIndex(HttpServletRequest, HttpServletResponse) 메소드가 호출된다.
MultiActionController 의 설정 예제 2
<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"> <bean class="samples.SampleDelegate"/> </property> </bean>
이번에는 MethodNameResolver 로 PropertiesMethodNameResolver 가 설정됬다. 따라서 request 가 /index/welcome.html, /**/notwelcome.html,/*/user?.html 일때 SampleDelegate 의 retriveIndex(HttpServletRequest, HttpServletResponse) 메소드가 호출된다.
- Command controllers
Spring 의 Command controller 는 Spring Web MVC 의 근간을 이루며 data objects 를 다를 수 있는 방법을 제공한다.
Struts 의 ActionForm 과 비슷하다.
AbstractCommandController : command controller 를 생성하기 위한 기본적인 기능을 제공하는 추상 객체이다.
request parameter 를 data object 에 binding 할 수 있다. form 처리기능은 제공하지 않는다. 하지만 validation feature 는 제공한다.
AbstractFormController : form 처리에 대한 기능을 가진 추상 객체, invalid form submission, validation, normal form workflow 기능을 제공한다.
SimpleFormController :
AbstractWizardFormController :
'프로그래밍 > Spring MVC' 카테고리의 다른 글
Spring MVC - fileupload (0) | 2009.12.24 |
---|---|
Spring MVC - Themes (0) | 2009.12.23 |
Spring MVC - Locale (0) | 2009.12.23 |
Spring MVC - Views (0) | 2009.12.23 |
Spring MVC - Handler Mapping (0) | 2009.12.22 |