资讯动态

什么是前端控制器

发布时间:2026/10/17 13:44:19 来源:尧图企业网站定制
什么是前端控制器前端控制器Front Controller是一种 Web 应用架构模式它的核心思想是用一个统一的入口组件接收所有请求由它负责调度和分发而不是让每个请求直接找到对应的处理程序。在 Spring MVC 中这个前端控制器就是DispatcherServlet。它是整个框架的“总调度中心”所有 HTTP 请求都会先经过它再由它分发给对应的 Controller 方法。一、为什么需要前端控制器在没有前端控制器的时代每个请求可能直接映射到一个 Servlet 或 JSP。比如/user/list → UserListServlet /user/detail → UserDetailServlet /order/list → OrderListServlet每个 Servlet 都要自己处理请求参数、调用业务逻辑、选择视图、处理异常。重复代码多公共逻辑编码、安全、日志散落各处维护困难。前端控制器模式把所有请求集中到一个入口由它统一处理公共逻辑再分发给具体的处理器。这样公共逻辑只写一次请求处理流程统一新增功能只需增加处理器不用改入口更容易做权限、日志、异常等全局控制二、Spring MVC 中的前端控制器Spring MVC 的前端控制器是DispatcherServlet它继承自HttpServlet在web.xml或 Java 配置中注册。servletservlet-namedispatcher/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classinit-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:spring-mvc.xml/param-value/init-paramload-on-startup1/load-on-startup/servletservlet-mappingservlet-namedispatcher/servlet-nameurl-pattern//url-pattern/servlet-mappingurl-pattern设为/表示拦截所有请求除了 JSP 等由容器直接处理的。Spring Boot 中DispatcherServlet自动注册默认映射也是/。三、前端控制器的工作流程一次请求的完整流程1. 客户端发送请求 2. DispatcherServlet 接收请求 3. DispatcherServlet 查询 HandlerMapping找到能处理该请求的 HandlerController 方法 4. DispatcherServlet 通过 HandlerAdapter 调用 Handler 5. Handler 执行业务逻辑返回 ModelAndView 6. DispatcherServlet 将 ModelAndView 交给 ViewResolver 7. ViewResolver 解析出具体的 View 8. View 渲染返回响应给客户端用图表示客户端 │ ▼ DispatcherServlet前端控制器 │ ├── HandlerMapping → 找到 Handler │ ├── HandlerAdapter → 调用 Handler │ │ │ ▼ │ Controller后端控制器 │ │ │ ▼ │ ModelAndView │ ├── ViewResolver → 解析视图 │ ▼ View → 渲染 → 响应四、前端控制器与后端控制器的区别对比前端控制器DispatcherServlet后端控制器Controller职责接收所有请求统一调度处理具体业务请求数量整个应用通常只有一个可以有多个关注点请求分发、组件协调业务逻辑、参数处理是否处理业务不处理具体业务处理具体业务类比机场塔台具体航班的机组前端控制器不关心业务它只负责“把请求交给谁处理”。Controller 才关心“这个请求要做什么”。五、前端控制器的优点集中控制所有请求统一入口便于统一处理编码、安全、日志等。降低耦合请求与处理器的映射由配置或注解决定而不是硬编码。易于扩展新增 Controller 不影响前端控制器。统一异常处理可以在前端控制器层面统一捕获和处理异常。可插拔的组件HandlerMapping、HandlerAdapter、ViewResolver 等都可以替换。六、Spring Boot 中的前端控制器Spring Boot 自动配置了DispatcherServlet不需要手动注册。默认映射为/并自动注册了常用的HandlerMapping、HandlerAdapter、ViewResolver等组件。如果需要自定义可以实现WebMvcConfigurerConfigurationpublicclassWebConfigimplementsWebMvcConfigurer{// 添加拦截器、资源处理器、消息转换器等}也可以通过配置文件调整DispatcherServlet的行为spring:mvc:servlet:path:/api七、常见面试问题1. DispatcherServlet 和 Controller 的关系DispatcherServlet 是前端控制器负责调度Controller 是后端控制器负责处理业务。DispatcherServlet 通过 HandlerMapping 找到对应的 Controller 方法再通过 HandlerAdapter 调用它。2. 为什么 DispatcherServlet 要映射/映射/表示拦截所有请求由 Spring MVC 统一处理。静态资源和 JSP 可以通过其他配置放行。3. DispatcherServlet 是线程安全的吗DispatcherServlet本身是无状态的它的doService方法不共享可变状态所以是线程安全的。真正的线程安全问题在于 Controller 中定义的实例变量。4. 前端控制器模式和后端控制器模式的区别前端控制器模式是所有请求先经过一个统一入口后端控制器模式是每个请求直接映射到各自的处理程序。Spring MVC 采用前端控制器模式。八、总结维度说明定义统一接收所有请求并负责调度的组件Spring MVC 实现DispatcherServlet核心职责请求分发、组件协调、统一处理公共逻辑工作流程接收请求 → 找 Handler → 调用 Handler → 处理返回值 → 渲染响应与 Controller 区别前端控制器负责调度Controller 负责业务优点集中控制、降低耦合、易于扩展Spring Boot自动注册默认映射/前端控制器是 Spring MVC 的入口和调度中心。理解它就理解了 Spring MVC 为什么能把请求、参数、业务、视图、异常这些环节串联起来。后续学习 HandlerMapping、HandlerAdapter、ViewResolver 等组件时它们都是围绕 DispatcherServlet 协作的。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑