请求MVC和组件MVC之间的区别

我听说JSF正在实现基于组件的MVC,而Spring MVC正在实现基于请求的MVC。 我想知道这两种types之间的确切技术差异是什么。

在基于请求(action)的MVC中,一个前端控制器servlet将根据请求的URL / params委托给动作模型。 您直接使用操作模型中的原始HttpServletRequestHttpServletResponse对象。 您必须亲自编写代码来收集,转换和validation请求参数,并在必要时更新模型值,然后才能调用业务操作。

在基于组件的MVC中,单个前端控制器将收集,转换和validation请求参数,并更新模型值本身,以便您只需要担心自己的业务操作。 控制器如何收集/转换/validation/更新值是在一个地方定义的,即视图。 由于“简单”的HTML是不可能的,所以需要特定的标记语言来实现这个目标。 在JSF 2.0的情况下,这是基于XML(XHTML)的。 您使用XML来定义UI组件,而UI组件又包含有关控制器应该如何收集/转换/validation/更新模型值并生成/呈现必要的HTML表示的信息。

在这一点上的优点和缺点应该是清楚的:对于基于请求的MVC框架,您需要自己编写更多(样板)代码来实现目标。 然而,最后你会对这个过程和HTML / CSS / JS输出有更好的细节控制。 使用基于组件的MVC框架,您不需要自己编写许多代码。 但是,对stream程和HTML / CSS / JS输出的细粒度控制较less。 所以,如果你想要做的事情与标准描述和/或实现提供的有所不同,那么当你不熟悉它的入口和出口时,你会花费更多的时间在基于组件的MVC框架中。

Manfred Riem(JSF 2.x团队成员,前Java EE 8 MVC 1.0规范主pipe)在Devoxx 14上关于MVC 1.0(JSR 371)的演讲中很好地概括了这一点:

照片

也可以看看:

  • 当用户界面可以通过CSS,HTML,JavaScript,jQuery实现时,JSF有什么需要?
  • Java Server Faces 2.0的主要缺点是什么?
  • 使用JSF作为Spring MVC的视图技术
  • devise模式基于Web的应用程序