Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc 请求MVC和组件MVC之间的区别_Spring Mvc_Jsf_Design Patterns_Model View Controller - Fatal编程技术网

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

Spring mvc 请求MVC和组件MVC之间的区别,spring-mvc,jsf,design-patterns,model-view-controller,Spring Mvc,Jsf,Design Patterns,Model View Controller,我听说JSF正在实现基于组件的MVC,而SpringMVC正在实现基于请求的MVC。我想知道这两种类型的确切技术区别是什么 在基于请求(操作)的MVC中,单个前端控制器servlet将根据请求URL/参数委托给操作模型。您可以直接使用动作模型中的原始HttpServletRequest和HttpServletResponse对象。在调用业务操作之前,您必须自己编写代码来收集、转换和验证请求参数,并在必要时更新模型值 在基于组件的MVC中,单个前端控制器将收集、转换和验证请求参数,并更新模型值本身

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

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

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

在这一点上,优势和劣势应该是清楚的:对于基于请求的MVC框架,您需要自己编写更多(样板)代码来实现目标。但是,您最终可以对流程和HTML/CSS/JS输出进行更细粒度的控制。使用基于组件的MVC框架,您不需要自己编写太多代码。但是,您对流程和HTML/CSS/JS输出的细粒度控制较少。因此,如果您想做一些与标准描述和/或实现提供的有所不同的事情,那么当您不熟悉基于组件的MVC框架的细节时,您将在基于组件的MVC框架中浪费更多的时间

Manfred Riem(JSF 2.x团队成员和前Java EE 8 MVC 1.0规范负责人)在以下会议上很好地概括了这一点:

另见:

很多人都说,在MVC中,模型代表的是数据库。这是真的吗?它是bean还是数据库?不,它不显式表示数据库。在Java世界中,模型只是一个Javabean。Javabean反过来也可以是一个数据库实体。这正是JDBC或JPA代码用来在Java运行时环境和数据库表之间映射/传输值的类。因此,asp.net mvc基于组件,rite?asp.net mvc基于请求,无状态,基于GET/POST机制。+1用于发布Manfred Riem在Devxx上的演示图片。我在谷歌搜索这个话题时就想到了这张幻灯片。许多好的问题都会根据专家经验产生一定程度的意见,但这个问题的答案往往几乎完全基于意见,而不是事实、参考资料或具体的专业知识。恕我直言,技术差异请求主要不是基于意见。