默认 Servlet
Spring MVC 允许将 DispatcherServlet
映射到 /
(从而覆盖容器默认 Servlet 的映射),同时仍然允许静态资源请求由容器的默认 Servlet 处理。它配置了一个 DefaultServletHttpRequestHandler
,其 URL 映射为 /**
,并且相对于其他 URL 映射具有最低优先级。
此处理器将所有请求转发到默认 Servlet。因此,它必须在所有其他 URL HandlerMappings
的顺序中保持最后。如果您使用 <mvc:annotation-driven>
,则情况就是如此。或者,如果您设置自己的自定义 HandlerMapping
实例,请务必将其 order
属性设置为一个低于 DefaultServletHttpRequestHandler
(其值为 Integer.MAX_VALUE
)的值。
以下示例展示了如何使用默认设置启用此功能:
覆盖 /
Servlet 映射的注意事项是,默认 Servlet 的 RequestDispatcher
必须通过名称而不是路径检索。DefaultServletHttpRequestHandler
在启动时尝试自动检测容器的默认 Servlet,使用大多数主要 Servlet 容器(包括 Tomcat、Jetty、GlassFish、JBoss、WebLogic 和 WebSphere)的已知名称列表。如果默认 Servlet 已使用不同的名称进行自定义配置,或者正在使用默认 Servlet 名称未知的不同 Servlet 容器,那么您必须明确提供默认 Servlet 的名称,如以下示例所示: