Spring MVC는 DispatcherServlet
을 /
에 매핑(따라서 컨테이너의 기본 서블릿 매핑을 재정의함)하는 동시에 static 리소스 요청이 컨테이너의 기본 서블릿에 의해 처리되도록 허용합니다. /**
의 URL 매핑과 다른 URL 매핑에 비해 우선순위가 가장 낮은 DefaultServletHttpRequestHandler
를 구성합니다.
이 핸들러는 모든 요청을 기본 서블릿으로 전달합니다. 따라서 다른 모든 URL HandlerMappings
의 순서에서 마지막에 남아 있어야 합니다. <mvc:annotation-driven>
을 사용하는 경우가 그렇습니다. 또는 자체적으로 사용자 정의된 HandlerMapping
인스턴스를 설정하는 경우 order
속성(property)을 DefaultServletHttpRequestHandler
의 값(Integer.MAX_VALUE
)보다 낮은 값으로 설정해야 합니다.
다음 예에서는 기본 설정을 사용하여 기능을 활성화하는 방법을 보여줍니다.
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
다음 예에서는 XML에서 동일한 구성을 달성하는 방법을 보여줍니다.
<mvc:default-servlet-handler/>
/
Servlet 매핑을 재정의할 때 주의할 점은 기본 Servlet에 대한 RequestDispatcher
를 경로가 아닌 이름으로 검색해야 한다는 것입니다. DefaultServletHttpRequestHandler
는 대부분의 주요 서블릿 컨테이너(Tomcat, Jetty, GlassFish, JBoss, Resin, WebLogic 및 WebSphere 포함)에 대해 알려진 이름 목록을 사용하여 시작 시 컨테이너의 기본 서블릿을 자동 감지하려고 시도합니다. 기본 서블릿이 다른 이름으로 사용자 정의 구성되었거나 기본 서블릿 이름을 알 수 없는 다른 서블릿 컨테이너가 사용되는 경우 다음 예와 같이 기본 서블릿 이름을 명시적으로 제공해야 합니다.
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable("myCustomDefaultServlet");
}
}
다음 예에서는 XML에서 동일한 구성을 달성하는 방법을 보여줍니다.
<mvc:default-servlet-handler default-servlet-name="myCustomDefaultServlet"/>