2011-05-10 23 views
3

我已經建立了處理超過HTTP POST 6名不同類型的請求GAE上的一個服務器,所有這些都涉及到任何創建,更新,或從數據存儲刪除對象。什麼是最好的設計呢?我會告訴你我目前的設計,並表達一些其他人。谷歌應用程序引擎的Servlet設計

  1. 我目前的設計將所有請求發送到同一個servlet,並使用「action」參數作爲POST的一部分來區分和處理不同的請求。這裏包括服務器應該運行的代碼。

例如

public void doPost(HttpServletRequest request, HttpServletResponse response) { 
     if (request.getParameter("action").equals("action_1")) {..code..} 
     if (request.getParameter("action").equals("action_2")) {..code..} 
     . 
     . 
     . 
     if (request.getParameter("action").equals("action_n")) {..code..} 
    } 

2._Similar以上,但不是這裏的代碼,這個servlet只是充當一個集中的servlet,並呼籲採取行動專用的servlet。

3._Have只是一個專門的servlet的每個動作。

哪些利弊上述設計,什麼是設置的首選方法GAE上的服務器?訪問數據存儲對我的設計有影響嗎?

+1

相關:http://stackoverflow.com/questions/3541077/design-patterns-web-based-applications – BalusC

+1

順便說一句,這個問題沒有什麼特別的GAE。 – stivlo

回答

1

我處於類似的情況。我從你的選擇1開始,這很好。唯一的問題是它需要大量的參數解析,將字符串轉換爲整數等等,以及將命令名稱手動映射到方法。選項2和3同樣費力,但更糟的是因爲你必須創建一堆輔助方法。如果我必須重做一遍,我會使用一個能夠爲我工作的庫,就像這個(我實際上正在考慮轉換爲這個庫):http://code.google.com/p/json-rpc/。瞧,沒有參數解析或手動創建幫助類!這恰好實現了一個json rpc客戶端 - 服務器接口,如果你正在做一個ajax「胖客戶端」,那麼這個接口是很好的。如果您在服務器端生成大部分HTML,則可能需要其他解決方案。

0
I have built a server on GAE that handles 6 different types requests over 
HTTP POST, all of which involve either creating, updating, or deleting objects 
from the datastore. What is the best design for this? 

這聽起來像是一個Web服務的工作。我最喜歡的是REST(儘管REST操作通常映射到URL而不是參數)。看看Resteasy docs

0

由於他們都做單獨的事情,使用單獨的servlet。把它們組合成一個servlet是沒有意義的:它使你的代碼和URL映射變得更加混亂。

+0

我不確定。您可以使用單個servlet作爲控制器/調度程序,將邏輯移動到每個pojo對應特定操作的pojos地圖(添加,編輯,創建..) – systempuntoout

+0

@systempuntoout然後,您只需重新創建servlet提供的功能映射,沒有真正的收益。 –

+0

你可能是對的;很長一段時間我不會擺弄J2EE。我記得我說過的一種方法(struts v1?),但我可能在談論史前史:P。 – systempuntoout

0

太多的servlet可以導致GAE環境慢班的加載時間(冷初創企業),但太少會導致請求爭,導致業績不佳,由於高等待時間。所以有一個折衷。應考慮

解決方法是使「永遠在線」和「暖要求」的功能,使你的servlet多線程安全的。