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

时间:2011-01-26 06:28:09

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

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

1 个答案:

答案 0 :(得分:90)

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

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

此时应该清楚优点和缺点:使用基于请求的MVC框架,您需要自己编写更多(样板)代码以实现目标。但是,您最终会对进程和HTML / CSS / JS输出进行更细粒度的控制。使用基于组件的MVC框架,您不需要自己编写很多代码。但是,您对进程和HTML / CSS / JS输出的细粒度控制较少。因此,如果您希望以不同于标准描述和/或实现提供的方式执行,那么当您不是基于组件的MVC框架时,您将浪费更多时间精通它的来龙去脉。

Manfred Riem(JSF 2.x团队成员和前Java EE 8 MVC 1.0规范负责人)在his speech about MVC 1.0 (JSR 371) on Devoxx 14期间很好地概述了它:

photo

另见: