Spring
[Spring] 스프링 MVC(4) - 서블릿 매핑
재담
2022. 3. 12. 22:00
서블릿 매핑
컨트롤러 매핑 경로로 전체 경로를 사용하고 싶다면 다음과 같이 설정하면 된다.
- 서블릿 매핑 설정에서 URL 패턴을 "/"로 지정
- 스프링 MVC 설정에 디폴트 서블릿 핸들러를 설정
<!-- web.xml 설정 -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 생략 -->
...
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 스프링 MVC 설정 -->
<beans>
<!-- 생략 -->
...
<mvc:annotation-driven />
<mvc:default-servlet-handler />
<!-- 생략 -->
...
</beans>
서블릿 매핑 설정에서 매핑 URL 패턴을 <url-pattern>/</url-pattern>으로 설정하면 jsp 요청을 제외한 나머지 모든 요청을 DispatcherServlet이 받게 된다. 만약 매핑된 컨트롤러가 없다면 404 응답 코드를 웹 브라우저에 전송하게 된다. 이때 404 응답 대신 컨테이너의 디폴트 서블릿을 이용해서 요청을 처리하도록 만들어주는 것이 <mvc:default-servlet-handler /> 설정이며, 다음과 같이 동작한다.
- 요청 URL에 매핑되는 컨트롤러를 검색한다. - 존재할 경우 컨트롤러를 이용해서 클라이언트 요청을 처리한다.
- 디폴트 서블릿 핸들러가 등록되어 있지 않다면, 404 응답 에러를 전송한다.
- 디폴트 서블릿 핸들러가 등록되어 있으면, 디폴트 서블릿 핸들러에 요청을 전달한다. 디폴트 서블릿 핸들러는 WAS의 디폴트 서블릿에 요청을 전달한다.
@EnableWebMvc 어노테이션을 사용할 경우 다음과 같이 디폴트 서블릿 핸들러를 등록할 수 있다.
@Configuration
@EnableWebMvc
public class SampleConfig extends WebMvcConfigurerAdapter {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
// 이하 생략
...
}
위 코드에서 WebMvcConfigurerAdapter에 정의된 메서드 중에서 configureDefaultServletHandling() 메서드를 재정의 했는데, 이 메서드의 파라미터로 전달받은 DefaultServletHandlerConfigurer의 enable() 메서드를 호출함으로써 디폴트 서블릿 핸들러가 활성화된다.
Reference
- 웹 개발자를 위한 Spring 4.0 프로그래밍 (최범균 저)