2013-07-03 114 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)。我會盡快更新我的回答:) –