2012-12-04 44 views
18

背景

我正在使用GWT,Java和EclipseLink開發Web應用程序。這些選擇中的每一個都是我爲實現此計劃而做出的選擇。 GWT是唯一的選擇,如果沒有確切地把握它與Spring之類的東西相比的話。現在,我使用GWT小部件來實現客戶端和GWT RequestFactory,以實現來自EclipseLink的實體的服務器 - 客戶端通信。Spring + GWT或Spring與GWT

查看

所以我認爲GWT,主要是一個與服務器 - 客戶端通信的簡單框架部件庫。這與我查看Spring的方式大致相同,Spring是一個具有更先進和更復雜的框架來控制服務器 - 客戶端通信的小部件庫,它可能不像GWT那樣方便地實現AJAX。因此,考慮到這些,我認爲GWT是理解並最終與Spring合作的墊腳石。但是,Google再次討論這個話題時,遇到了幾個像oneone這樣的主題,這些主題似乎違背了Spring的原始概念,以及GWT的含義。

的問題

  1. 是否有關於GWT和Spring的意見誤解?如果是這樣,那麼一些簡要的指導意見將非常感謝!
  2. Spring框架中的GWT窗口小部件會是什麼樣的對立面?
  3. 在Spring框架中,GWT RequestFactory的對應部分是什麼?
+0

這不是程序員堆棧交換下的問題嗎? – SSR

+0

1.我認爲你正在專門談論Spring MVC。 Spring核心庫提供了一個相當於Guice的依賴注入容器。 – Vikdor

+0

@SachinShekharR有一部分人覺得這是在programmer.stackexchange下進行的,但不確定,因爲它比我在程序員看到的帖子更具體。 – hulkmeister

回答

24

這實際上取決於您計劃如何在您的應用程序中使用GWT

GWT最適合用於單主機頁面的Web應用程序。
這意味着使用GWT在客戶端完成所有流同步和業務邏輯。
這是GWT確實閃耀的地方(詳情請參閱here)。

但是,如果你走下這條路,你將最終得到基本上兩個不同的應用程序。 您將擁有一個使用GWT開發的前端和一個使用Spring的後端。 您的後端(Spring或任何您使用的)將僅充當「數據存儲」,爲您提供要在GWT前端中顯示的數據。 因此,您可能不會使用任何Spring MVC's功能。

當然,您也可以使用Spring MVC,並使用GWT只爲您的網站添加Web 2.0ish功能,但對於該用例,我建議您更願意使用jQuery,Closure或其他JavaScript框架。

您的問題:

是否有關於GWT和Spring的意見誤解?如果是這樣, 一些簡要的指導意見將不勝感激!

如果按照預期使用GWT(單主機頁面web應用程序),那麼您將不會使用Spring的MVC部分。您仍然可以使用授權,身份驗證,ORM和Spring框架的許多其他組件,但GWT處理所有視圖。
Spring或多或少只會作爲GWT前端應用程序的數據存儲。 這就像有兩個不同的獨立應用程序通過通信協議連接(RequestFactory,REST,等)。

在Spring框架中,GWT小部件的對應部分是什麼?

Spring框架中的GWT小部件沒有真正的對應部分(可能是某些擴展JSF)。 Spring是關於服務器端的,所有的視圖都是在服務器端創建的。 GWT是關於客戶端的。

什麼是反一部分GWT RequestFactory在Spring 框架

RequestFactory是您的前端應用程序(GWT)和後端應用程序之間的通信協議(春季) 。 當您使用Spring MVC時,您不需要任何通信協議,因爲視圖是在已有數據的服務器端生成的。

+0

謝謝你的迴應!我也讀過你的另一篇文章,這引出了另一個問題,我可能不得不在這個論壇上打開另一個頁面。我會首先向你提出:我確實需要一個類似桌面的應用程序。我想使用每個GWT頁面通用的菜單機制在GWT應用程序之間切換。這可能嗎?這來自您關於按預期使用GWT的說明:單主機頁面。 – hulkmeister

+0

你對於不同的GWT應用程序意味着什麼? 您是否想創建一個包含不同GWT應用程序的桌面應用程序? 我寧願創建一個包含不同GWT組件/小部件的GWT應用程序。 但是,如果你真的需要不同的GWT應用程序,那麼有不同的方法來做到這一點。 一種方法是創建多個GWT應用程序(每個應用程序都有一個EntryPoint),每個應用程序都有一個單主機頁面。在每個GWT應用程序中,您可以擁有一個菜單,其中包含menuItem,它們基本上只是指向相應單個主機頁面的超鏈接(加載相應的GWT應用程序)。 –

+0

對於你的問題,我的意思是不同的GWT應用程序的答案就像你在'但是'之後描述的那樣 - 因爲這是我對這個應用程序的想法。我同意你的看法,我寧願有一個包含不同組件/小部件的GWT應用程序。我目前的情況是,在我的頁面上有一個按鈕,它可以清除當前顯示的所有小部件,並加載用戶填寫的表單(或一組新組件/小部件)。根據你的經驗,這通常是GWT開發人員在GWT應用程序的不同部分或「頁面」之間導航的方式嗎? – hulkmeister

2

GWT不是一個小部件庫,而是一個完整的框架,用於生成運行在客戶端而不是服務器端的完整Web應用程序。基本的區別在於Spring(MVC模式)是以服務器爲中心的,所以它連接到ddbb,執行業務邏輯併產生視圖發送給客戶端,因爲GWT(MVP模式)在瀏覽器中運行主持人,視圖,它只是連接到服務器以獲取結果或對象(遠程方法)。

說,這取決於你的GWT應用程序,你可能需要更多或更少的邏輯在服務器端,以及其他元素,如ddbb,彈簧等

有關何時選擇GWT或任何其他框架的決定取決於您是否需要在瀏覽器中運行的豐富(類似桌面)應用程序。從邏輯上講,你可以將GWT和spring混合到任意級別,但合乎邏輯的方法是讓spring承擔數據模型及其業務邏輯的責任,而GWT則完成其餘任務。

瞭解此組合的最佳方式是探索一個由Spring-roo生成的小型項目。它可以爲maven,spring,gwt,mvp和rf創建一個完整的項目。只需安裝roo 1.2。2並運行Roo的控制檯這組命令:

project --topLevelPackage com.project.contacts 
persistence setup --provider ECLIPSELINK --database HYPERSONIC_PERSISTENT 
database properties set --key database.url --value jdbc:hsqldb:/var/tmp/contacts.db 
entity jpa --class com.project.contacts.domain.Contact --testAutomatically 
field string name --notNull --sizeMin 1 --sizeMax 30 --class ~.domain.Contact 
field string surname --notNull --sizeMin 1 --sizeMax 30 --class ~.domain.Contact 
field string phone --notNull --sizeMin 1 --sizeMax 15 --class ~.domain.Contact 
web gwt setup 
web gwt all --proxyPackage ~.client.proxy --requestPackage ~.client.request 
quit 

然後執行

mvn gwt:run 

主要的問題我用小豆看到的是,它使用「的AspectJ」要更新管理的歸類,當你修改模型,但您可以在項目設置完成後使用eclipse刪除roo依賴項和aspectj文件。

+0

感謝這個例子!我會試試看看我的理解。 – hulkmeister

+0

這個例子非常有啓發性,我正在尋找沒有記錄在任何地方的'gwt all'行。謝謝。 – 2012-12-21 09:34:03

0

退房爲您的後端Objectify。更簡單。