Java EE FrontController与Spring的DispatcherServlet相同

时间:2011-05-03 16:07:42

标签: spring spring-mvc design-patterns model-view-controller

如果查看Java EE FrontController序列图,Controller会将请求委托给Dispatcher,文档说明:

  

调度员负责视图管理和导航,   管理下一个视图的选择以呈现给用户,以及   提供向该资源进行矢量控制的机制。

在Spring MVC中,DispatcherServlet充当 FrontController (如Craig Walls的书中所述),此Servlet将请求委托给其他控制器,后者又调用适当的Service类(用于处理请求)然后再次将ModelAndView的实例返回到DispatcherServlet

所以粗略地说这就是请求通常的旅行方式:

客户 - > DispatcherServlet - >控制器 - >服务 - > DAO

如果将此流与Java EE FrontController模式序列图进行比较,则DispatcherServlet似乎不是真正的FrontController。

你怎么说这个?

1 个答案:

答案 0 :(得分:11)

我会说DispatcherServlet填充前端控制器和调度程序的卷。但是,不是直接委托给视图,DispatcherServlet委托给另一个控制器。这使您可以更好地将演示文稿与业务逻辑分开。在“纯”前端控制器范例中,您可能必须为视图添加一些业务逻辑。

简而言之,DispatcherServlet实现了与Front Controller模式相同的目标。但它确实允许您向调度程序添加另一层控制器,从而略微偏离它。我认为这是件好事。