我们常说的 servlet 就是 DispatcherServlet 吗 不是。很多人刚学 Spring MVC 时会把Servlet和DispatcherServlet混为一谈但实际上Servlet └── DispatcherServletDispatcherServlet 只是 Servlet 的一种特殊实现。1. 什么是 ServletServlet 是 Java Web 规范中的一个接口。public interface Servlet { void init(); void service(); void destroy(); }作用接收HTTP请求 处理请求 返回响应例如最原始的写法WebServlet(/hello) public class HelloServlet extends HttpServlet { Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) { resp.getWriter().write(hello); } }请求流程浏览器 ↓ Tomcat ↓ HelloServlet ↓ 响应这里没有 Spring。2. DispatcherServlet 是什么Spring MVC 为了解决 Servlet 开发的问题设计了DispatcherServlet其继承关系Servlet ↓ GenericServlet ↓ HttpServlet ↓ FrameworkServlet ↓ DispatcherServlet所以DispatcherServlet 本质上也是 Servlet只是功能更强。3. 为什么需要 DispatcherServlet假设不用 Spring MVC。每个接口都要写一个 ServletUserServlet OrderServlet ProductServletTomcat/user - UserServlet /order - OrderServlet /product - ProductServlet项目大了以后几十个 几百个 上千个Servlet维护困难。Spring MVC 改成所有请求 ↓ DispatcherServlet ↓ Controller例如GetMapping(/user/{id}) public User query(Long id)开发者只写 Controller。DispatcherServlet 帮你完成URL匹配 参数绑定 JSON转换 异常处理 视图解析4. 请求到达 DispatcherServlet 后发生什么例如GET /user/1流程Tomcat ↓ DispatcherServlet ↓ HandlerMapping ↓ UserController ↓ UserService ↓ 返回结果Spring 内部GetMapping(/user/{id}) public User get(Long id)会被解析成URL: /user/{id} Method: get()DispatcherServlet 根据 URL 找到对应方法。5. Spring Boot 中 DispatcherServlet 在哪注册很多人没看到配置以为没有 Servlet。其实 Spring Boot 自动配置了DispatcherServletAutoConfiguration创建Bean DispatcherServlet然后注册ServletRegistrationBean相当于servlet servlet-namedispatcher/servlet-name servlet-class DispatcherServlet /servlet-class /servlet servlet-mapping url-pattern//url-pattern /servlet-mapping只是 Spring Boot 帮你做了。6. Filter、Servlet、Interceptor 的关系这是面试常问的。请求Browser ↓ Tomcat ↓ Filter ↓ DispatcherServlet ↓ Interceptor ↓ Controller执行顺序Filter ↓ Interceptor.preHandle ↓ Controller ↓ Interceptor.postHandle ↓ Interceptor.afterCompletion ↓ Filter其中Filter属于 Servlet 规范javax.servlet.FilterTomcat 管理。DispatcherServlet属于 Spring MVCorg.springframework.web.servlet.DispatcherServletSpring 管理。Interceptor属于 Spring MVCHandlerInterceptor由 DispatcherServlet 调用。面试标准答案如果面试官问我们常说的 Servlet 就是 DispatcherServlet 吗可以回答不是。Servlet 是 Java Web 规范中的基础接口用于处理 HTTP 请求DispatcherServlet 是 Spring MVC 提供的一个前端控制器Front Controller它本身继承自 HttpServlet因此本质上也是一个 Servlet。在传统 Java Web 中一个 URL 可能对应一个 Servlet而在 Spring MVC 中所有请求统一进入 DispatcherServlet再由它根据 HandlerMapping 分发到具体的 Controller 方法处理。因此 DispatcherServlet 是 Servlet 的一种实现但 Servlet 不等于 DispatcherServlet。一句话总结Servlet 是规范 DispatcherServlet 是 Spring MVC 对 Servlet 的高级实现