默认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"/>