Spring MVC - Handler Mapping
프로그래밍/Spring MVC 2009. 12. 22. 00:23
Hadler mappings
request 를 처리할 handler 를 결정할 때 handler mapping 을 사용하다.
DispatcherServlet 으로 request 가 들어오게 되면 request 를 조사하고 HandlerExucutionChaing 을 구성하기 위해 handler mapping 에 넘겨진다.
- AbstractHandlerMapping
. interceptors : interceptor 의 list
. defaultHandler : default handler
. order :
. alwaysUseFullPath : handler 를 찾는데 servlet 에 mapping 된 url 을 상대경로로 사용할 것인지를 결정한다. true 로 설정하게 되면 handler 를 찾는데 full path 를 사용하게 된다. servlet 이 /testing/* 에 mapping 되어 있고 alwaysUserFullPath 가 true 이면 /testing/viewPage.html 이 사용되며, false 일 경우에는 /viewPage.html 이 사용된다.
. urlDecode : spring 2.5 에서 기본값은 true
. lazyInitHandler : lazy initialization 되는 singleton handler 를 허용한다. 기본값은 false 이다.
- BeanNameUrlHandlerMapping
request 를 처리할 controller 를 결정하는데 request url 과 bean name 을 사용한다.
http://samples.com/editaccount.form request 는 /editaccount.form bean 에서 처리한다.
handler mapping 으로 설정된 bean 이 없을때는 기본으로 BeanNameUrlHandlerMapping 이 사용된다.
<beans> <bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <bean name="/editaccount.form" class="org.springframework.web.servlet.mvc.SimpleFormController"> <property name="formView" value="account"/> <property name="successView" value="account-created"/> <property name="commandName" value="account"/> <property name="commandClass" value="samples.Account"/> </bean> <beans>
- SimpleUrlHandlerMapping
Properties 에 설정된 mapping 정보에 따라 request 를 처리할 handler 를 결정한다.
<beans> <!-- no 'id' required, HandlerMapping beans are automatically detected by the DispatcherServlet --> <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="mappings"> <value> /*/account.form=editAccountFormController /*/editaccount.form=editAccountFormController /ex/view*.html=helpController /**/help.html=helpController </value> </property> </bean> <bean id="helpController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/> <bean id="editAccountFormController" class="org.springframework.web.servlet.mvc.SimpleFormController"> <property name="formView" value="account"/> <property name="successView" value="account-created"/> <property name="commandName" value="Account"/> <property name="commandClass" value="samples.Account"/> </bean> <beans>
- Intercepting request - the HandlerInterceptor interface
handler mapping 에 추가될 Interceptor 는 org.springframework.web.servlet.HandlerInterceptor 인터페이스를 구현해야 한다.
public boolean preHandle(HttpServletRequest, HttpServletResponse, Object) throws Exception
위 메소드는 리턴되는 boolean 값에 의해 요청에 대한 처리를 진행할 것인지 아닌진를 결정한다.
ex> 정해진 시간내에서만 해당 요청을 처리하는 예제
<beans> <bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <property name="interceptors"> <list> <ref bean="officeHoursInterceptor"/> </list> </property> <property name="mappings"> <value> /*.form=editAccountFormController /*.view=editAccountFormController </value> </property> </bean> <bean id="officeHoursInterceptor" class="samples.TimeBasedAccessInterceptor"> <property name="openingTime" value="9"/> <property name="closingTime" value="18"/> </bean> <beans>
package samples; public class TimeBasedAccessInterceptor extends HandlerInterceptorAdapter { private int openingTime; private int closingTime; public void setOpeningTime(int openingTime) { this.openingTime = openingTime; } public void setClosingTime(int closingTime) { this.closingTime = closingTime; } public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Calendar cal = Calendar.getInstance(); int hour = cal.get(HOUR_OF_DAY); if (openingTime <= hour < closingTime) { return true; } else { response.sendRedirect("http://host.com/outsideOfficeHours.html"); return false; } } }
'프로그래밍 > 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 - Controllers (0) | 2009.12.22 |