DispatcherServlet 是 Spring 提供的前端控制器,需在 web.xml 中声明为 Servlet 并配置拦截规则与初始化参数;默认加载 /WEB-INF/[servlet-name]-servlet.xml,需配置 HandlerMapping、HandlerAdapter、ViewResolver 等组件;依赖 spring-webmvc,web.xml 版本不低于 2.4。

在传统 Web 项目(基于 web.xml 部署描述符)中配置 DispatcherServlet,核心就是把它声明为一个标准 Servlet,并指定其拦截规则和初始化参数。它不是手动编写的类,而是 Spring 提供的现成前端控制器,负责统一接收请求、分发给 Controller 并协调视图渲染。
在 web.xml 中注册 DispatcherServlet
这是最基础且必需的一步。需要在 WEB-INF/web.xml 文件中添加 <servlet> 和 <servlet-mapping> 配置:
-
定义 servlet 实例:指定类名为
org.springframework.web.servlet.DispatcherServlet,并可选设置初始化参数contextConfigLocation指向 Spring MVC 的配置文件路径(如/WEB-INF/mvc-config.xml或classpath:spring-mvc.xml); -
设置加载时机:通过
<load-on-startup>1</load-on-startup>确保应用启动时就初始化,避免首次请求才加载带来的延迟; -
配置 URL 映射:在
<servlet-mapping>中用<url-pattern>控制哪些请求交由它处理,常见写法有:-
/—— 拦截所有请求(除已匹配的静态资源外),推荐用于现代 REST + 前端路由场景; -
*.html或*.do—— 拦截特定后缀,适合传统页面跳转风格; -
/app/*—— 拦截子路径,便于版本或模块隔离。
-
准备 Spring MVC 配置文件
DispatcherServlet 默认会尝试加载 /WEB-INF/[servlet-name]-servlet.xml(例如 servlet 名为 springmvc,则找 /WEB-INF/springmvc-servlet.xml)。你也可以通过 contextConfigLocation 显式指定位置。
该配置文件至少应包含:
立即学习“Java免费学习笔记(深入)”;
-
HandlerMapping:如
RequestMappingHandlerMapping(支持@Controller+@RequestMapping); -
HandlerAdapter:如
RequestMappingHandlerAdapter,用于执行带注解的 Controller 方法; -
ViewResolver:如
InternalResourceViewResolver,将逻辑视图名(如"success")解析为实际 JSP 路径(如/WEB-INF/jsp/success.jsp); - (可选)组件扫描:启用
<context:component-scan base-package="com.example.controller" />自动发现@Controller类。
确保依赖与类路径正确
项目需引入 Spring Web MVC 的核心 jar(如 spring-webmvc),且版本与 Spring 核心(spring-context、spring-beans 等)兼容。Maven 示例关键依赖:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.31</version> </dependency>
同时确认 web.xml 的 schema 版本不低于 2.4(推荐 3.0+),以支持 Servlet 3.0+ 特性。
注意请求处理边界
DispatcherServlet 不处理静态资源(如 CSS、JS、图片),除非显式配置 <mvc:resources> 或使用 SimpleUrlHandlerMapping 排除规则。若用 <url-pattern>/</url-pattern>,建议配合 <mvc:default-servlet-handler/> 让容器默认 Servlet 处理静态文件,避免 404。


















