預設 Servlet
Spring MVC 允許將 DispatcherServlet 對映到 /(從而覆蓋容器預設 Servlet 的對映),同時仍允許由容器預設 Servlet 處理靜態資源請求。它配置了一個 DefaultServletHttpRequestHandler,其 URL 對映為 /**,並且相對於其他 URL 對映具有最低優先順序。
此處理器將所有請求轉發到預設 Servlet。因此,它必須在所有其他 URL HandlerMappings 的順序中保持最後。如果您使用 <mvc:annotation-driven>,則情況就是如此。或者,如果您設定了自己的自定義 HandlerMapping 例項,請確保將其 order 屬性設定為低於 DefaultServletHttpRequestHandler 的值,後者是 Integer.MAX_VALUE。
以下示例展示瞭如何使用預設設定啟用該功能
-
Java
-
Kotlin
-
Xml
@Configuration
public class WebConfiguration implements WebMvcConfigurer {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
@Configuration
class WebConfiguration : WebMvcConfigurer {
override fun configureDefaultServletHandling(configurer: DefaultServletHandlerConfigurer) {
configurer.enable()
}
}
<mvc:default-servlet-handler/>
覆蓋 / Servlet 對映的注意事項是,必須透過名稱而不是路徑來檢索預設 Servlet 的 RequestDispatcher。DefaultServletHttpRequestHandler 在啟動時會嘗試自動檢測容器的預設 Servlet,它使用大多數主要 Servlet 容器(包括 Tomcat、Jetty、GlassFish、JBoss、WebLogic 和 WebSphere)的已知名稱列表。如果預設 Servlet 已透過不同的名稱自定義配置,或者正在使用預設 Servlet 名稱未知的不同 Servlet 容器,那麼您必須顯式提供預設 Servlet 的名稱,如以下示例所示
-
Java
-
Kotlin
-
Xml
@Configuration
public class CustomDefaultServletConfiguration implements WebMvcConfigurer {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable("myCustomDefaultServlet");
}
}
@Configuration
class CustomDefaultServletConfiguration : WebMvcConfigurer {
override fun configureDefaultServletHandling(configurer: DefaultServletHandlerConfigurer) {
configurer.enable("myCustomDefaultServlet")
}
}
<mvc:default-servlet-handler default-servlet-name="myCustomDefaultServlet"/>