sitelink1  
sitelink2  
sitelink3 http://1 
extra_vars6 ko 

BeanNameUrlHandlerMapping

지금 살펴보고 있는 부분은 HandlerMapping에 대한 이해이다. Spring 프레임워크에서는 이러한 HandlerMapping을 처리하기 위해서 XML을 기반으로 처리하고 있다. 전에 이야기한 것 처럼 web.xml 에서 서블릿명으로 주어진 petstore 라는 이름으로 정해져 있음으로 우리가 살펴보고 있는 XML 파일은 petstore-servlet.xml 인 것이다. 즉 petstore-servlet.xml 에서 HandlerMapping에 대한 정보를 포함하고 있다.

HandlerMapping을 설정하고 해당 Controller를 찾는 설정을 담당하고 있는 XML 파일은 bean 엘리먼트를 사용한다. 우리가 먼저 살펴볼 HandlerMapping은 BeanNameUrlHandlerMapping인데 jpetstore의 petstore-servlet.xml 에서는 다음과 같이 셋팅되어 있다.

<bean id="defaultHandlerMapping" class="org.ingframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

BeanNameUrlHandlerMapping은 HTTP 요청을 웹 애플리케이션 컨텍스트내 명시된 빈즈의 이름으로 매핑하는 것이다. Spring MVC에서는 HandlerMapping을 특별히 셋팅하지 않으면 디폴트로 BeanNameUrlHandlerMapping으로 설정되어진다.
BeanNameUrlHandlerMapping은 HTTP Request의 주소를 빈 이름(bean name)과 매핑시켜주는 역할을 한다. 즉, HTTP 요청의 URL을 이용하여 해당 URL을 처리해야 하는 Controller와 매핑해 준다.
jpetstore에서는 디폴트 HandlerMapping으로 BeanNameUrlHandlerMapping을 사용하는 것을 알 수 있다. 즉, 다음에 언급할 SimpleUrlHandlerMapping에 해당하는 HTTP 요청 외에는 기본적으로 BeanNameUrlHandlerMapping을 사용한다.

SimpleUrlHandlerMapping

SimpleUrlHandlerMapping을 jpetstore에서 사용하는 것을 살펴보자. 다음은 petstore-servlet.xml 에 SimpleUrlHandlerMapping을 사용하는 부분이다.

<bean id="secureHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
	<property name="interceptors">
	        <list>
		        <ref bean="signonInterceptor"/>
	        </list>
	</property>
	<property name="urlMap">
		<map>
			<entry key="/shop/editAccount.do" value-ref="secure_editAccount"/>
			<entry key="/shop/listOrders.do" value-ref="secure_listOrders"/>
			<entry key="/shop/newOrder.do" value-ref="secure_newOrder"/>
			<entry key="/shop/viewOrder.do" value-ref="secure_viewOrder"/>
		</map>
	</property>
</bean>

<bean id="signonInterceptor" class="org.springframework.samples.jpetstore.web.spring.SignonInterceptor"/>

<bean id="secure_editAccount" class="org.springframework.samples.jpetstore.web.spring.AccountFormController">
	<property name="petStore" ref="petStore"/>
	<property name="validator" ref="accountValidator"/>
	<property name="successView" value="index"/>
</bean>

<bean id="secure_listOrders" class="org.springframework.samples.jpetstore.web.spring.ListOrdersController">
	<property name="petStore" ref="petStore"/>
</bean>

<bean id="secure_newOrder" class="org.springframework.samples.jpetstore.web.spring.OrderFormController">
        <property name="petStore" ref="petStore"/>
        <property name="validator" ref="orderValidator"/>
</bean>

<bean id="secure_viewOrder" class="org.springframework.samples.jpetstore.web.spring.ViewOrderController">
	<property name="petStore" ref="petStore"/>
</bean>

SimpleUrlHandlerMapping은 BeanNameUrlHandlerMapping 보다 좀 더 강력한 핸들러 매핑을 제공한다. SimpleUrlHandlerMapping은 Controller와 URL을 매핑하기 위해서 별도의 빈을 통해서 관리하고 있다(<property> 엘리먼트). 또한 Ant 스타일의 경로 매치 능력도 가진다.

jpetstore에서 SimpleUrlHandlerMapping을 어떻게 사용하고 있는지 위의 예제를 통해서 살펴보자.
<bean> 엘리먼트의 id 속성 값이 “secureHandlerMapping”이 SimpleUrlHandlerMapping을 사용하는 것을 알 수 있다. 여기에 <property> 에리먼트에 두 개의 name 속성 값이 존재한다. 하나는 “interceptors”이고, 다른 하나는 “urlMap”이다. “interceptors”를 name 속성 값으로 사용하고 있는 <property> 에리먼트에서는 “signonInterceptor”를 참조하고 있다. 이를 따라가보면 “org.springframework.samples.jpetstore.web.spring.SignonInterceptor”클래스를 사용하고 있다. 여기서 HandlerInterceptors 인터페이스에 대한 이해가 필요한데 이는 Spring 프레임워크의 레퍼런스 문서를 참조하기 바란다. 13.4.3 HandlerInterceptors 인터페이스

다음으로 “urlMap” 이라는 name 속성 값을 가지는 <property> 엘리먼트를 살펴보자. <map> 엘리먼트에 속한 <entry> 엘리먼트의 속성들로 정의되어 있다. 중요한 건 최종 속성들의 값에 해당하는 각각의 값들이다. “key” 속성에 해당하는 값들이 HTTP Request의 URL에 해당하고, “value-ref”의 값들이 이를 처리하는 Controller를 지정하는 참조 이름(즉, <bean> 엘리먼트의 id 값)이 된다. 따라서 위의 petstore-servlet.xml의 예제를 살펴보면 각 “key” 속성에 해당하는 “value-ref” 값을 <bean> 엘리먼트로 정의하고 각각의 Controller를 정의하고 있는 것을 볼 수 있다.

HandlerMapping 까지의 Spring MVC 처리 과정 정리

이러한 것을 통해 현재까지의 Spring MVC의 전체적인 처리과정을 다시금 되짚어보면 HTTP Request를 DispatcherServlet이 받아 HandlerMapping에게 처리하고자 하는 Controller를 요청한다. 그러면 HandlerMapping는(여기서는 petstore-servlet.xml에 정의) 요청 URL을 BeanNameUrlHandlerMapping과 SimpleUrlHandlerMapping을 요청에 맞게 Controller를 얻어 반환하게 되는 것이다. 이전에 보았던 그림을 생각해 보면 두 번째에 처리에 해당하는 것까지의 설명이 된다.

번호 제목 글쓴이 날짜 조회 수
27 Spring Framework 에서 사용하는 annotation 황제낙엽 2024.01.17 466
26 Spring MVC configuration file 황제낙엽 2024.01.17 367
25 Spring, JSP, Gradle, Eclipse 환경 구축[2] - 샘플 프로젝트 file 황제낙엽 2023.12.24 334
24 Spring, JSP, Gradle, Eclipse 환경 구축[1] - 레퍼런스 조사 황제낙엽 2023.12.23 334
23 [Bard] Spring 과 Spring Boot의 차이 file 황제낙엽 2023.12.21 335
22 Spring 과 Spring Boot의 차이 file 황제낙엽 2020.05.26 552
21 Spring Security OAuth2.0 파헤치기 황제낙엽 2019.09.05 397
20 Spring Security OAuth2구현 file 황제낙엽 2019.09.05 768
19 Spring Security OAuth 황제낙엽 2019.09.05 743
18 [Spring3.1.1] Eclipse 에 Spring Framework 환경 구축하기 file 황제낙엽 2018.08.08 325
17 웹 개발의 변화와 스프링 황제낙엽 2008.03.19 364
16 Spring MVC 가 아닌 환경에서 Spring Pojo Bean 사용하기 (Pure Java App 또는 Servlet App) 황제낙엽 2009.10.22 541
15 프로젝트의 기본이 되는 Logging, Exception 처리 전략 황제낙엽 2007.01.30 344
14 SimpleFormController 정리 황제낙엽 2007.09.19 483
13 스프링 개발팁 황제낙엽 2007.08.17 473
12 유효성체크 (org.springframework.validation.Validator) 황제낙엽 2007.08.17 344
11 CSS와 XHTML을 사용한 효율적인 View 개발 전략 황제낙엽 2007.01.30 336
10 Spring framework jpetstore 샘플 분석기 - (6) jpetstore 예제로 살펴보는 Spring MVC와 iBatis 연동 황제낙엽 2007.01.18 284
9 Spring framework jpetstore 샘플 분석기 - (5) jpetstore 에서의 InternalResourceViewResolver 황제낙엽 2007.01.18 249
» Spring framework jpetstore 샘플 분석기 - (4) jpetstore 에서의 HandlerMapping 황제낙엽 2007.01.18 244