在基于请求(操作)的MVC中,单个前置控制器Servlet将根据请求URL/参数委派给操作模型。您直接使用操作模型中的原始HttpServletRequest和HttpServletResponse对象。在调用业务操作之前,您必须自己编写代码来收集、转换和验证请求参数,并在必要时更新模型值。在组件化的MVC中,单个前置控制器将自行收集、转换和验证请求参数并更新模型值,因此您只需要关注业务操作本身即可。控制器需要如何收集/转换/验证/更新值是在一个地方定义的,即视图。由于这在“普通”HTML中不可能实现,因此需要特定的标记语言才能实现目标。在JSF 2.0的情况下,它是基于XML(XHTML)的。您使用XML来定义UI组件,这些组件又包含有关控制器应如何收集/转换/验证/更新模型值以及生成/呈现必要的HTML表示的信息。此时应该清楚了优缺点:使用基于请求的MVC框架,您需要自己编写更多(样板)代码才能实现目标。但是,您最终会对过程和HTML/CSS/JS输出拥有更精细的控制。使用基于组件的MVC框架,您不需要自己编写太多代码。但是,您对过程和HTML/CSS/JS输出的控制更少。因此,如果您想以与标准描述和/或实现提供的方式略有不同的方式进行操作,则在组件化的MVC框架中,当您不熟悉其细节时,将浪费更多的时间。 曼弗雷德·里姆(JSF 2.x团队成员和前Java EE 8 MVC 1.0规范负责人)在他在Devoxx 14上关于MVC 1.0(JSR 371)的演讲中很好地概述了它: 参见: 当可以通过CSS、HTML、JavaScript、jQuery实现UI时,JSF的需求是什么? Java Server Faces 2.0的主要缺点是什么? 将JSF作为Spring MVC的视图技术使用 基于Web的应用程序设计模式