如果查看Java EE FrontController序列图,Controller会将请求委托给Dispatcher,文档说明:
调度员负责视图管理和导航, 管理下一个视图的选择以呈现给用户,以及 提供向该资源进行矢量控制的机制。
在Spring MVC中,DispatcherServlet
充当 FrontController (如Craig Walls的书中所述),此Servlet将请求委托给其他控制器,后者又调用适当的Service类(用于处理请求)然后再次将ModelAndView
的实例返回到DispatcherServlet
。
所以粗略地说这就是请求通常的旅行方式:
客户 - > DispatcherServlet - >控制器 - >服务 - > DAO
如果将此流与Java EE FrontController模式序列图进行比较,则DispatcherServlet
似乎不是真正的FrontController。
你怎么说这个?
答案 0 :(得分:11)
我会说DispatcherServlet填充前端控制器和调度程序的卷。但是,不是直接委托给视图,DispatcherServlet委托给另一个控制器。这使您可以更好地将演示文稿与业务逻辑分开。在“纯”前端控制器范例中,您可能必须为视图添加一些业务逻辑。
简而言之,DispatcherServlet实现了与Front Controller模式相同的目标。但它确实允许您向调度程序添加另一层控制器,从而略微偏离它。我认为这是件好事。