全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-18 8 分钟 ✍️ juanwangdev

Spring MVC DispatcherServlet前端控制器

DispatcherServlet 是 Spring MVC 的中央调度器,所有请求都经过它统一分发处理。

核心职责

职责说明
请求分发将请求路由到对应的 Controller
组件协调组织 HandlerMapping、HandlerAdapter 等组件
异常处理统一处理请求处理过程中的异常
视图渲染协调 ViewResolver 完成视图解析

配置方式

web.xml 配置

XML
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

Java 配置

Java
public class WebAppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) {
        AnnotationConfigWebApplicationContext context =
            new AnnotationConfigWebApplicationContext();
        context.register(WebConfig.class);

        DispatcherServlet servlet = new DispatcherServlet(context);
        ServletRegistration.Dynamic registration =
            servletContext.addServlet("dispatcher", servlet);
        registration.setLoadOnStartup(1);
        registration.addMapping("/");
    }
}

核心方法

doDispatch

Java
protected void doDispatch(HttpServletRequest request,
                          HttpServletResponse response) throws Exception {
    // 1. 获取处理器执行链
    mappedHandler = getHandler(processedRequest);

    // 2. 获取处理器适配器
    HandlerAdapter ha = getHandlerAdapter(mappedHandler.getHandler());

    // 3. 执行拦截器前置处理
    if (!mappedHandler.applyPreHandle(processedRequest, response)) {
        return;
    }

    // 4. 执行处理器
    mv = ha.handle(processedRequest, response, mappedHandler.getHandler());

    // 5. 执行拦截器后置处理
    mappedHandler.applyPostHandle(processedRequest, response, mv);

    // 6. 解析并渲染视图
    processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);
}

默认组件

DispatcherServlet 默认加载以下组件(配置在 DispatcherServlet.properties):

组件默认实现
HandlerMappingRequestMappingHandlerMapping
HandlerAdapterRequestMappingHandlerAdapter
ViewResolverInternalResourceViewResolver
HandlerExceptionResolverExceptionHandlerExceptionResolver

特殊配置

Java
@Configuration
public class WebConfig implements WebMvcConfigurer {

    // 配置静态资源处理
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}

DispatcherServlet 拦截 "/" 会覆盖默认 Servlet,需配置静态资源处理。

要点总结

  • DispatcherServlet 是前端控制器,统一调度所有请求
  • 支持_web.xml_和 Java 代码两种配置方式
  • doDispatch 是核心方法,完成请求处理全流程
  • 默认加载一组标准组件,可自定义覆盖

📝 发现内容有误?点击此处直接编辑

← 上一篇 Spring MVC Controller控制器
下一篇 → Spring MVC HandlerMapping处理器映射器
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库