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를 얻어 반환하게 되는 것이다. 이전에 보았던 그림을 생각해 보면 두 번째에 처리에 해당하는 것까지의 설명이 된다.

번호 제목 글쓴이 날짜 조회 수
공지 (확인전) [2021.03.12] Eclipse에서 Spring Boot로 JSP사용하기(Gradle) 황제낙엽 2023.12.23 0
공지 [작성중/인프런] 스프링부트 시큐리티 & JWT 강의 황제낙엽 2023.12.20 6
23 Spring프레임워크 소개문서 (2) 황제낙엽 2007.03.22 123
22 Spring프레임워크 소개문서 (1) 황제낙엽 2007.03.22 107
21 Cugain의 샘플프로젝트 jpetstore 분석기 - (1) jpetstore 설치 file 황제낙엽 2007.02.22 123
20 Cugain의 샘플프로젝트 jpetstore 분석기 - (7) PetStoreImpl.java 황제낙엽 2007.05.24 51
19 Cugain의 샘플프로젝트 jpetstore 분석기 - (6) petstore-servlet.xml 분석 황제낙엽 2007.04.27 19
18 Cugain의 샘플프로젝트 jpetstore 분석기 - (5) applicationContext.xml 분석 황제낙엽 2007.04.21 232
17 Cugain의 샘플프로젝트 jpetstore 분석기 - (4) dataAccessContext-jta.xml 분석 황제낙엽 2007.04.21 27
16 Cugain의 샘플프로젝트 jpetstore 분석기 - (3) dataAccessContext-local.xml 분석 황제낙엽 2007.04.21 40
15 Cugain의 샘플프로젝트 jpetstore 분석기 - (2) web.xml 분석 황제낙엽 2007.03.20 92
14 IoC (Inversion of Control) 컨테이너에 대한 정리 황제낙엽 2007.02.21 50
13 자바지기 1차 오픈 소스 스터디 문서모음 file 황제낙엽 2007.01.30 46
12 Spring 프레임워크를 이용한 효율적인 개발 전략 1차 황제낙엽 2007.01.30 47
11 Spring framework jpetstore 샘플 분석기 - (6) jpetstore 예제로 살펴보는 Spring MVC와 iBatis 연동 황제낙엽 2007.01.18 48
10 Spring framework jpetstore 샘플 분석기 - (5) jpetstore 에서의 InternalResourceViewResolver 황제낙엽 2007.01.18 17
» Spring framework jpetstore 샘플 분석기 - (4) jpetstore 에서의 HandlerMapping 황제낙엽 2007.01.18 36
8 Spring framework jpetstore 샘플 분석기 - (3) jpetstore 에서의 Spring MVC 설정 황제낙엽 2007.01.18 13
7 Spring framework jpetstore 샘플 분석기 - (2) jpetstore 에서의 Spring 초기 설정과 IoC 황제낙엽 2007.01.18 18
6 Spring framework jpetstore 샘플 분석기 - (1) jpetstore 설치하기 황제낙엽 2007.01.18 30
5 Spring WebFlow Introduction (웹개발을 직관적으로) 황제낙엽 2006.12.09 555
4 IoC(Inversion of Control)란 무엇인가? 황제낙엽 2006.12.09 93