Loading...
Spring Framework Reference Documentation 7.0.2의 Default Servlet의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Spring MVC는 DispatcherServlet을 /에 매핑할 수 있도록 허용합니다(따라서 컨테이너의 default Servlet 매핑을 override함). 이때 static resource 요청은 여전히 컨테이너의 default Servlet이 처리하도록 할 수 있습니다. 이를 위해 URL 매핑이 /**이고 다른 URL 매핑에 비해 가장 낮은 priority를 갖는 DefaultServletHttpRequestHandler를 설정합니다.
이 handler는 모든 요청을 default Servlet으로 forward합니다. 따라서 모든 다른 URL HandlerMappings의 순서에서 마지막에 남아 있어야 합니다. <mvc:annotation-driven>을 사용하는 경우가 그렇습니다. 또는 직접 customized HandlerMapping instance를 설정하는 경우, 그 order property를 Integer.MAX_VALUE인 DefaultServletHttpRequestHandler보다 낮은 값으로 설정해야 합니다.
다음 예제는 default setup을 사용하여 이 feature를 활성화하는 방법을 보여줍니다:
1@Configuration 2public class WebConfiguration implements WebMvcConfigurer { 3 4 @Override 5 public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 6 configurer.enable(); 7 } 8}
1@Configuration 2class WebConfiguration : WebMvcConfigurer { 3 4 override fun configureDefaultServletHandling(configurer: DefaultServletHandlerConfigurer) { 5 configurer.enable() 6 } 7}
1<mvc:default-servlet-handler/>
/ Servlet 매핑을 override할 때의 주의점은 default Servlet에 대한 RequestDispatcher를 path가 아니라 name으로 조회해야 한다는 것입니다. DefaultServletHttpRequestHandler는 대부분의 주요 Servlet 컨테이너(Tomcat, Jetty, GlassFish, JBoss, WebLogic, WebSphere 포함)에 대해 알려진 name 목록을 사용하여, startup 시점에 컨테이너의 default Servlet을 auto-detect하려고 시도합니다. default Servlet이 다른 name으로 custom-configure되었거나, default Servlet name이 알려지지 않은 다른 Servlet 컨테이너를 사용하는 경우, 다음 예제에서 보듯이 default Servlet의 name을 명시적으로 제공해야 합니다:
1@Configuration 2public class CustomDefaultServletConfiguration implements WebMvcConfigurer { 3 4 @Override 5 public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 6 configurer.enable("myCustomDefaultServlet"); 7 } 8}
1@Configuration 2class CustomDefaultServletConfiguration : WebMvcConfigurer { 3 4 override fun configureDefaultServletHandling(configurer: DefaultServletHandlerConfigurer) { 5 configurer.enable("myCustomDefaultServlet") 6 } 7}
1<mvc:default-servlet-handler default-servlet-name="myCustomDefaultServlet"/>
Static Resources
Path Matching