对于最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

默认 Servlet

Spring MVC 允许将 DispatcherServlet 映射到 /(从而覆盖容器默认 Servlet 的映射),同时仍然允许静态资源请求由容器的默认 Servlet 处理。它会配置一个 DefaultServletHttpRequestHandler,其 URL 映射为 /**,并且相对于其他 URL 映射具有最低的优先级。spring-doc.cadn.net.cn

此处理器将所有请求转发给默认的 Servlet。因此,它必须排在所有其他 URL HandlerMappings 的最后。如果你使用了 <mvc:annotation-driven>,则会自动满足这一要求。或者,如果你自行配置了自定义的 HandlerMapping 实例,请确保将其 order 属性设置为小于 DefaultServletHttpRequestHandler 的值,而后者的值为 Integer.MAX_VALUEspring-doc.cadn.net.cn

以下示例展示了如何使用默认配置启用该功能:spring-doc.cadn.net.cn

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		configurer.enable();
	}
}
@Configuration
@EnableWebMvc
class WebConfig : WebMvcConfigurer {

	override fun configureDefaultServletHandling(configurer: DefaultServletHandlerConfigurer) {
		configurer.enable()
	}
}

以下示例展示了如何在 XML 中实现相同的配置:spring-doc.cadn.net.cn

<mvc:default-servlet-handler/>

覆盖 / Servlet 映射的一个注意事项是,必须通过名称而非路径来获取默认 Servlet 的 RequestDispatcherDefaultServletHttpRequestHandler 会在启动时尝试自动检测容器的默认 Servlet, 它使用一个已知名称列表,涵盖了大多数主流 Servlet 容器(包括 Tomcat、Jetty、GlassFish、JBoss、Resin、WebLogic 和 WebSphere)。 如果默认 Servlet 已被自定义配置为其他名称,或者正在使用一个未知默认 Servlet 名称的其他 Servlet 容器, 那么您必须显式提供默认 Servlet 的名称,如下例所示:spring-doc.cadn.net.cn

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		configurer.enable("myCustomDefaultServlet");
	}
}
@Configuration
@EnableWebMvc
class WebConfig : WebMvcConfigurer {

	override fun configureDefaultServletHandling(configurer: DefaultServletHandlerConfigurer) {
		configurer.enable("myCustomDefaultServlet")
	}
}

以下示例展示了如何在 XML 中实现相同的配置:spring-doc.cadn.net.cn

<mvc:default-servlet-handler default-servlet-name="myCustomDefaultServlet"/>