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 |