默认Servlet

Spring MVC允许将DispatcherServlet映射到/(从而覆盖容器的默认Servlet的映射),同时仍然允许容器的默认Servlet处理静态资源请求。它使用/**的URL映射和相对于其他URL映射的最低优先级配置DefaultServletHttpRequestHandler

此处理程序将所有请求转发到默认Servlet。因此,它必须保持所有其他URLHandlerMappings的顺序中的最后一位。如果您使用<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的RequestDispatcherDefaultServletHttpRequestHandler尝试在启动时使用大多数主要Servlet容器(包括Tomcat、Jetty、GlassFish、JBoss、WebLogic和WebSphere)的已知名称列表自动检测容器的默认Servlet。如果默认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"/>