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 /> 설정이며, 다음과 같이 동작한다.

  1. 요청 URL에 매핑되는 컨트롤러를 검색한다. - 존재할 경우 컨트롤러를 이용해서 클라이언트 요청을 처리한다.
  2. 디폴트 서블릿 핸들러가 등록되어 있지 않다면, 404 응답 에러를 전송한다.
  3. 디폴트 서블릿 핸들러가 등록되어 있으면, 디폴트 서블릿 핸들러에 요청을 전달한다. 디폴트 서블릿 핸들러는 WAS의 디폴트 서블릿에 요청을 전달한다.

 

@EnableWebMvc 어노테이션을 사용할 경우 다음과 같이 디폴트 서블릿 핸들러를 등록할 수 있다.

@Configuration
@EnableWebMvc
public class SampleConfig extends WebMvcConfigurerAdapter {
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
    
    // 이하 생략
    ...
}

위 코드에서 WebMvcConfigurerAdapter에 정의된 메서드 중에서 configureDefaultServletHandling() 메서드를 재정의 했는데, 이 메서드의 파라미터로 전달받은 DefaultServletHandlerConfigurerenable() 메서드를 호출함으로써 디폴트 서블릿 핸들러가 활성화된다.


Reference

  • 웹 개발자를 위한 Spring 4.0 프로그래밍 (최범균 저)