跳到主要内容

默认 Servlet

DeepSeek V3 中英对照 Default Servlet

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

此处理程序将所有请求转发到默认的 Servlet。因此,它必须保持在所有其他 URL HandlerMappings 的顺序中的最后位置。如果你使用 <mvc:annotation-driven>,情况就是如此。另外,如果你设置了自己的自定义 HandlerMapping 实例,请确保将其 order 属性设置为低于 DefaultServletHttpRequestHandler 的值,即 Integer.MAX_VALUE

以下示例展示了如何使用默认设置启用该功能:

@Configuration
public class WebConfiguration implements WebMvcConfigurer {

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
java

重写 / Servlet 映射的注意事项是,默认 Servlet 的 RequestDispatcher 必须通过名称而不是路径来获取。DefaultServletHttpRequestHandler 会尝试在启动时自动检测容器的默认 Servlet,使用大多数主流 Servlet 容器(包括 Tomcat、Jetty、GlassFish、JBoss、WebLogic 和 WebSphere)的已知名称列表。如果默认 Servlet 已自定义配置为不同的名称,或者如果使用的 Servlet 容器中默认 Servlet 名称未知,则必须显式提供默认 Servlet 的名称,如下例所示:

@Configuration
public class CustomDefaultServletConfiguration implements WebMvcConfigurer {

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable("myCustomDefaultServlet");
}
}
java