Spring 3부터 mvc태그를 통하여 Controller처리를 위한 설정을 쉽게 하도록 Spring mvc 네임스페이스를 제공한다.
Spring 3.0부터 제공하는 mvc 태그 설정이다. Annotation기반의 Controller호출 설정과 필요한 bean설정을 편리하게 하도록 만들어졌다. 그러나 내부 수정이 어렵기 때문에 mvc:annotation-driven에서 제공하는 기능에 대하여 잘 숙지하고 변경이 불가능 한 경우에는 mvc:annotation-driven을 쓰지 않고 필요한 bean을 수동으로 넣어줘야하는 경우도 있다.
mvc:annotation-driven에서 쓰는 bean설정을 중복으로 쓰지 않도록 주의한다.
(다음 설정과 동일한 동작을 한다.)
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="writeAcceptCharset" value="false" /> </bean> <bean class="org.springframework.http.converter.ResourceHttpMessageConverter" /> <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" /> <bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter" /> <!-- jaxb2라이브러리 존재시 --> <bean class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" /> <!-- jackson 라이브러리 존재시 --> <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/> <!-- rome 라이브러리 존재시 --> <bean class="org.springframework.http.converter.feed.AtomFeedHttpMessageConverter" /> <bean class="org.springframework.http.converter.feed.RssChannelHttpMessageConverter" />
기존 HandlerMapping에는 Interceptor를 모든 url에 일괄적으로만 적용할 수 있었기 때문에 전자정부 프레임워크에서는 SimpleUrlAnnotationHandlerMapping을 제공하여 url별로 Interceptor를 걸 수 있도록 하였다. 그러나 Spring 3부터 제공하는 <mvc:interceptors>태그를 통해 url마다 Interceptor를 적용할 수 있도록 Spring mvc태그 스키마에서 제공하고 있다. 따라서 SimpleUrlAnnotationHandlerMapping은 deprecated되었으며 url별로 Interceptor를 적용하기 위해서는 <mvc:interceptors>태그를 사용하도록 한다.
Interceptor를 일괄 적용하기 위해서는 다음의 예와 같이 사용한다.
<mvc:interceptors> <bean class="egov.interceptors.EgovInterceptor"/> </mvc:interceptors>
특정 패턴의 url에만 인터셉터를 적용하기 위해서는 <mvc:interceptors>태그 내부에 <mvc:interceptor>를 사용한다.
만약 /egov/sample로 시작되는 URL요청에만 인터셉터를 정의하기 위해서는 다음과 같이 사용할 수 있다.
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/egov/sample/*"/> <bean class="egov.interceptors.EgovInterceptor"/> </mvc:interceptor> </mvc:interceptors>
또한 interceptor에 특정 URL Pattern을 제외하여 맵핑하는 기능도 지원하고 있다. 이 때는 <mvc:interceptor>내부에서 <exclude-mapping>태그를 사용한다.
만약 /egov/로 시작하는 URL중 /egov/admin/으로 시작하는 URL에 interceptor맵핑을 제외하고 싶으면 다음과 같이 사용한다.
<exclude-mapping> 테그는 spring 3.2 버전 부터 사용 가능 합니다.
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/egov/**"/> <mvc:exclude-mapping path="/egov/admin/**"/> <bean class="egov.interceptors.EgovInterceptor"/> </mvc:interceptor> </mvc:interceptors>
Controller에서 별다른 로직 없이 View를 지정하여 DispatcherServlet에 넘겨주는 작업만 하는 경우가 많다. 이럴 때 사용할 수 있는 것이 바로 <mvc:view-controller>태그이다.
<mvc:view-controller>태그를 설정하여 매핑할 URL패턴과 View이름만 넣어주면 해당 URL을 매핑하고 설정한 view를 리턴하는 ParameterizableViewController가 자동으로 등록된다.
만약 ”/“URL을 요청받았을 경우 “index”를 View이름으로 리턴하기 위해서는 다음과 같이 사용한다.
<mvc:view-controller path="/" view-name="index"/>
InternalResourceViewResolver의 prefix를 /WEB-INF/views/로 정하고 suffix를 .jsp로 정하였다면 / URL이 요청되었을 때 /WEB-INF/views/index.jsp view를 호출하게 된다.