WebMvcConfigurer
是 Spring MVC 提供的接口,用于自定义 MVC 配置(如拦截器、视图解析、静态资源处理等)。虽然它本身是 Spring 的抽象层,但其底层实现仍然依赖于 Servlet API,尤其是在处理请求、响应和资源映射时。以下是 WebMvcConfigurer
实现与 Servlet API 的主要关联点:
1. Servlet
容器基础支持
WebMvcConfigurer
的配置最终会通过 Spring 的 DispatcherServlet
与 Servlet 容器交互,核心依赖以下 Servlet API:
-
HttpServletRequest
和HttpServletResponse
Spring MVC 的控制器、拦截器等最终处理的是 Servlet 标准请求和响应对象。例如,WebMvcConfigurer
配置的拦截器(InterceptorRegistry
)会操作这些对象。 -
ServletContext
用于访问 Web 应用上下文,例如通过ResourceHandlerRegistry
配置静态资源路径时,底层会调用ServletContext.getResourceAsStream()
或getRealPath()
。
2. 过滤器(Filter
)与拦截器
-
Filter
接口
Spring MVC 的某些功能(如跨域处理CorsFilter
)本质上是 Servlet 过滤器的封装。WebMvcConfigurer
可以通过addInterceptors
配置拦截器,但拦截器的执行仍依赖于 Servlet 容器的过滤器链。 -
FilterChain
拦截器的preHandle
/postHandle
方法在 Servlet 过滤器的执行流程中插入逻辑。
3. 资源处理与默认 Servlet
-
DefaultServletHttpRequestHandler
当通过WebMvcConfigurer.configureDefaultServletHandling
启用默认 Servlet 处理静态资源时,底层会调用 Servlet 容器的默认 Servlet(如 Tomcat 的DefaultServlet
)。 -
RequestDispatcher
用于请求转发(如forward:
前缀)或包含资源,通过ServletContext.getRequestDispatcher()
实现。
4. 异步处理(Servlet 3.0+)
-
AsyncContext
若配置异步请求处理(如WebMvcConfigurer.configureAsyncSupport
),底层依赖 Servlet 3.0 的ServletRequest.startAsync()
方法。 -
AsyncListener
用于监听异步请求的生命周期事件。
5. 会话与属性管理
-
HttpSession
通过WebMvcConfigurer
配置的会话相关逻辑(如会话超时)最终操作HttpSession
对象。 -
ServletContext
属性
全局属性存储和监听(如ServletContextAttributeListener
)可能影响 MVC 的初始化行为。
6. 视图解析与 JSP 集成
-
Servlet
的RequestDispatcher
JSP 视图解析(如InternalResourceViewResolver
)最终通过RequestDispatcher.forward()
渲染页面。 -
JspServlet
若使用 JSP,底层仍依赖 Servlet 容器的 JSP 处理器。
总结
WebMvcConfigurer
的实现通过以下方式与 Servlet API 交互:
-
直接依赖:如
HttpServletRequest
、ServletContext
、Filter
。 -
间接封装:如通过
DispatcherServlet
桥接 Servlet 容器的生命周期。 - 功能扩展:如异步处理、静态资源映射基于 Servlet 规范。
虽然 Spring MVC 抽象了大部分 Servlet API,但理解这些底层关联有助于调试和高级定制(例如整合传统 Servlet 过滤器或监听器)。