預設Servlet
Spring MVC允許將 DispatcherServlet
對映到 /
(從而覆蓋容器預設Servlet的對映),同時仍允許容器預設Servlet處理靜態資源請求。它將 DefaultServletHttpRequestHandler
配置為URL對映 /**
,並且相對於其他URL對映具有最低優先順序。
此處理器會將所有請求轉發給預設Servlet。因此,它必須在所有其他URL HandlerMapping
的順序中排在最後。如果您使用 <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"/>