《前端控制器模式》|J2EE企业架构模式
关键词:Front Controller、请求统一入口、集中控制、路由分发、权限校验
说明:前端控制器模式不属于GOF23设计模式,属于J2EE企业架构模式
一、什么是前端控制器模式
前端控制器模式(Front Controller Pattern):为Web应用提供唯一的请求入口,所有客户端请求都先经过这个前端控制器,由它统一完成公共处理(路由、鉴权、编码、日志、参数校验),再分发到对应的业务处理器。
避免分散在各个页面/接口中重复写登录校验、编码处理等通用逻辑。

核心意图
集中管理Web请求的公共横切逻辑,统一入口做预处理,再分发至具体页面/业务处理器。
角色划分
- Client(客户端):浏览器,发起HTTP请求
- Front Controller(前端控制器):全局唯一入口,接收所有请求,调用调度器
- Dispatcher(调度器):根据请求路径,分发请求到对应的视图/业务处理器
- View(视图):最终渲染返回给客户端的页面/数据
数据流:
Client Request → Front Controller → Dispatcher → View
二、UML结构图
角色划分:
- Client:浏览器发起请求
- FrontController:全局入口,处理公共逻辑,持有Dispatcher
- Dispatcher:负责路由分发
- View:页面渲染

三、Java完整示例
模拟Web请求分发,代码全部使用英文。
// View
public class HomeView {
public void show() {
System.out.println("Displaying Home Page");
}
}
public class StudentView {
public void show() {
System.out.println("Displaying Student Page");
}
}
// Dispatcher
public class Dispatcher {
private HomeView homeView;
private StudentView studentView;
public Dispatcher() {
homeView = new HomeView();
studentView = new StudentView();
}
public void dispatch(String request) {
if (request.equalsIgnoreCase("home")) {
homeView.show();
} else if (request.equalsIgnoreCase("student")) {
studentView.show();
}
}
}
// Front Controller
public class FrontController {
private Dispatcher dispatcher;
public FrontController() {
dispatcher = new Dispatcher();
}
private boolean isAuthenticate() {
// simulate authentication
return true;
}
private void trackRequest(String request) {
System.out.println("Request log: " + request);
}
public void dispatchRequest(String request) {
// common processing
trackRequest(request);
if(isAuthenticate()) {
dispatcher.dispatch(request);
}
}
}
// Client
public class Client {
public static void main(String[] args) {
FrontController frontController = new FrontController();
frontController.dispatchRequest("home");
frontController.dispatchRequest("student");
}
}
运行输出:
Request log: home
Displaying Home Page
Request log: student
Displaying Student Page
四、前端控制器模式 vs MVC中的Controller
| 模式 | 定位 | 区别 |
|---|---|---|
| 前端控制器模式 | J2EE架构模式,全局请求入口 | 所有请求统一拦截,处理公共横切逻辑,负责路由分发 |
| MVC Controller | MVC架构的组件 | 接收前端控制器转发后的请求,处理具体业务,组装模型数据 |
SpringMVC中
DispatcherServlet就是前端控制器模式的经典实现。
五、优缺点总结
✅ 优点
- 请求统一入口,权限校验、日志、编码等公共逻辑集中处理,避免重复代码
- 请求路由统一管理,便于全局管控
- 减少视图与业务之间的直接耦合
- 公共逻辑变更只需要修改前端控制器,所有请求生效
❌ 缺点
- 单点入口,如果设计不当会造成前端控制器过重
- 所有请求都经过这一层,有一定性能开销
- 复杂场景下调度逻辑容易膨胀
六、框架应用场景
- Spring MVC DispatcherServlet(最典型实现)
- Struts 核心前端控制器
- Web框架的全局过滤器、网关思想同源(Spring Cloud Gateway)
七、小结
前端控制器模式核心:所有Web请求统一进入前端控制器,完成鉴权、日志等公共预处理,再由调度器分发到对应视图/业务处理器。
归属:J2EE架构模式,不属于GOF23;SpringMVC DispatcherServlet就是该模式落地。
0 条笔记