2013-07-03 168 views

回答

7

根据Struts2 Interview Questions and Answers

Struts2的是一种基于拉的MVC架构,其中所有的数据被存储在值栈和由视图层用于呈现检索。

具体来说:

在推送MVC的数据(模型)的情况下被构造和通过把它在范围变量 像请求或会话给予由控制器的 视图层。典型的例子是Spring MVC和Struts1。另一方面,Pull-MVC将控制器中典型构造的模型数据 保存在一个共同的地方,即动作中,然后 通过视图层呈现。

+5

如果你的答案只是一个复制和粘贴,你应该***链接源代码:http://www.bullraider.com/java/struts2/interview-questions –

+1

在这里你可以找到更多http:// www.guyrutenberg.com/2008/04/26/pull-vs-push-mvc-architecture/ –

3

推拉的概念是指服务器与客户端相关的功能。在“推送”应用程序中,服务器在自己启动时向客户端推送或发送数据。在“拉”应用程序中,服务器正在等待或接收由客户端发起的消息。

一个很好的解释,这里给出mvc-pattern-its-importance-push-pull这里pull-vs-push-mvc-architecture

了Struts1和Spring都使用MVC推。这个问题可能会有所帮助spring-mvc-complex-model-population-from-multiple-sources Struts2的使用拉

+2

对不起,但整个万维网正在说相反。 Spring MVC是PUSH,Struts1是PUSH,但是** Struts2是PULL ** ... –

+0

谢谢!正在谈论struts1 .. - 编辑 – Tala

+0

但MVC推拉之间哪个更好 –

-1

对不起。我不认为支柱1,支柱2和Spring MVC可以作为PUSH MVC ..

既是所有框架的使用前端控制器[在各自的部署描述符中定义的“Struts的Filer类和Spring的Controller Listener”。现在,所有这些框架工作都通过反射使用该控制器将表单数据保存在各自的bean [or model]对象中。

现在从我们的Action Controller中,我们可以接收bean对象,并且会获得值,但是在实际上生成bean对象[或模型]的前端控制器中,通过使用request.getParameter(param )或内部的request.getParameterValues(param)方法。所以这可以看作是PULL。

因此,根据我的想法,我们可以说这些框架可以使用两层,即由最终程序员使用的PULL层和由框架基类使用的PUSH层。

2

Struts2,玩!等等各种拉模型实现的MVC模式。

条款“”和“”直接引用实现View和Model之间使用观察者模式的类型。作为GoF的Observer模式的解释说明,我们有:

在一个极端,我们称之为推模型,主题发送观察者的详细信息有关的改变,无论他们想不想要。在另一个极端是拉模型;该主题只发送最少量的通知,观察人员此后明确要求详细信息。

这意味着推模型的实现需要视图和模型都使用相同的语言实现,它们在相同的环境中执行。这种实现的好例子是Javascript单页应用程序,其中View和Model组件在浏览器内部执行,并且框架,即Backbone,提供MVC(又名Observer)机制。通常,Model组件与某种服务器API交互,以坚持并获取持久数据。

另一方面,拉动模型允许您使用View组件和Controller/Model组件的不同技术实现MVC。在这种MVC中,没有明确使用Observer模式,而View仅与Controller进行交互。通常在浏览器中执行的View组件发送到Controller组件请求模型的更新或模型的状态。通常请求是使用HTTP协议实现的。这种实现需要使用某种类型的“扩充的HTML脚本语言”,如JSP,它允许自动创建View和Controller之间的链接。

+0

Spring MVC不是拉式模型。 –

+0

@AleksandrM,看起来你是对的。我发现很多资源都说Spring是push模型的实现。我一直认为Spring MVC实现了拉式模型。在推模式中,View观察模型,但是如何使用JSP来实现这一点?无论如何,我有正确的答案。 –

+0

@AleksandrM好吧,我明白了。您的定义遵循本次讨论中提到的内容[J2EE模式:关于MVC Pull和MVC Push的说明](http://www.theserverside.com/discussions/thread.tss?thread_id=22143)。我会尽快更新我的回答:) –