2014-02-16 65 views
0

關於使用spring-mvc(REST服務)和jQuery設計系統的最佳方法。我認爲存在以下方法。在你有春天的服務和jQuery的東西REST spring服務和JQUERY web集成最佳實踐

  1. 一個戰爭文件,用這種方法,我們擁有所有的域對象提供與彈簧MVC一起使用,我們可以創建初始的JSP頁面,然後刷新使用jQuery一些元素致電我們的服務。
  2. 兩個war文件,其中一個具有spring服務,另一個包含spring-mvc stuff和jquery,在這種情況下,頁面的創建可以通過jsp頁面完成,也可以使用jquery調用我們的服務來刷新元素,但要使這可能需要在第二場戰爭中使用一個共同的域對象庫,並且在需要創建的某些控制器(它聽起來像重複代碼)中內部使用restTemplate。
  3. 有一個運行REST服務的戰爭文件和一個沒有任何java或spring東西的其他「包」只有jquery,這意味着所有的調用和信息檢索必須使用jquery完成,初始jsp頁面創建不能用這個來完成選項,所有的內容都是通過REST服務獲得的。 (不需要使用內部控制器通過java調用服務)

考慮一下,我意識到一,二有以下缺點。

  • 在同一個戰爭文件中有服務和網絡的東西聽起來像在SOA思考一個壞主意,這場戰爭的運動將導致移動不需要的jQuery和網絡的東西。
  • 把jsp和jquery混合起來聽起來不是一個好主意,但我認爲這是一種常見的做法(我想知道爲什麼?),使用這個我認爲我們需要在第二次戰爭中創建一些控制器來初始創建網頁,去使用restTemplate獲取初始信息,然後使用jquery調用更新或刷新。它認爲,一個有控制器只是檢索數據的服務,爲什麼不直接去...

我只是想實現的第三種方法,但問題是:有我」任何缺點m沒有看到或者在使用該方法之前應該知道的任何建議?還有任何建議來處理這種系統,它會很高興聽到你的東西,來自java和jQuery開發人員

+0

對我來說,看起來您似乎在尋找兩種不同的理念,託管您的API的Spring應用程序以及可以在任何地方託管的前端應用程序......我會編寫'JQuery'應用程序並將其託管。 ..任何東西,在您的Java應用程序上啓用xsite,並只需致電您的其他網站。如果你想用spring來構建一個前端應用程序。多數民衆贊成在罰款,但如果你想春天主持休息...讓它主持休息。 – AnthonyJClink

回答

2

我同意你的觀點,第3版給你最大的靈活性,是你會通常在設計界看到。

將其餘部分和前端作爲完全獨立的應用程序處理。如果正確完成,你可以有一個非常強大的應用程序能夠適應敏捷。

  • 版本1:在初始控制器調用中加載頁面,並使用jquery進行後續服務調用。所有的代碼都存在於一個包中。

    缺點是緊耦合。您現在只能使用您的API的語言,而不再爲您的數據和服務提供基於服務的方法。

    我已經看到該版本主要應用於應用程序開發人員比基於SOA的語言更關心異步前端調用。

  • 版本2:有一場包含Spring服務的戰爭,還有一場針對JS的戰爭。

    該方法的問題可以通過使用jar而不是其他服務器應用程序來解決。儘管這種方法是常用的,但是退回仍然依賴於外部包裝。

    使用包含所有代碼來創建數據庫並創建域對象的獨立於控制器用於序列化和響應Web請求的代碼的jar創建了一個管理api的非常乾淨的方法,但是這會創建一個複雜性並且一個額外的組件,可以避免使用版本3.它也給出了同樣奇怪的行爲,你在版本1中看到。

    我見過這種方法由開發純API應用程序的團隊採取。我還沒有看到在需要前端組件的團隊中完成這項工作。方法一或三已被用於這些情況。

  • 版本3:創建一個僅處理前端責任的應用程序創建處理服務器端責任的應用程序。

在這兩個版本2和第3版,從你的HTTP調用單獨的服務電話。讓它們不同,因爲它允許模塊化。

舉例來說,我們需要應對的HTTP請求

@Controller 
class MyController{ 
    @Autowired 
    private MyService service; 
    @GET 
    public String getData(String dataId){ 
     return service.getData(dataId); 
    } 
} 

,我們需要主動MQ響應請求

Message m = queueReceiver.receive(); 
if (m instanceof DataRequest) { 
    DataRequest message = (DataRequest) request; 
    queueSender.send(service.getData(request.getDataId())); //service call 
} else { 
    // Handle error 
} 

此外,它可以讓你管理,你需要什麼樣的能力處理http方面與您的服務方不同。

@GET 
public String getData(HttpRequest request, String dataId){ 
    if(!this.handleAuth(request)){ 
     throw new 403(); 
    } 
    try{ 
     return service.getData(dataId); 
    catch(Exception e){ 
     throw new WrappedErrorInProperHttpException(e); 
    } 
} 

這使您的服務層可以處理對那些服務有意義的任務,而無需處理所有的http廢話。並且讓你處理與服務層分開的所有HTTP垃圾。

+0

我認爲你理解我的觀點的一部分,但根本不瞭解,我同意REST服務可以在服務器上運行,而其他任何地方都沒有,我可以在另一個前端應用程序中使用jQuery來調用這些服務。但爲什麼有些應用程序使用spring-mvc + jquery來完成這個過程,僅僅使用純粹的jquery就足夠了,基於這兩種方法的優點或缺點?這應該是第二種方法退出的任何原因。 (混合spring-mvc和jquery)來調用rest api – Koitoer

+0

我沒有理由同時使用......在我的經驗(這是有限的)我還沒有看到這樣做。 RestTemplate用於在服務器中進行客戶端調用...如果正在使用RestTemplate調用現有控制器內部的api ...我會很困惑,爲什麼要這樣做。如果存在jQuery,那麼在一個jsp ..這是有道理的,因爲瀏覽器會加載所有數據,並在數據加載完成後對服務器進行http調用。這是有道理的......但鏈接他們...... JQuery --->控制器 - >休息調用 - >控制器 - > JQuery,沒有任何意義。 – AnthonyJClink

+0

我現在看到你的問題...對不起。讓我澄清我的答案。 – AnthonyJClink