2011-11-10 163 views
3

基本上是或不是問題,但我也在尋求最佳實踐方面的建議。使用Servlet來處理AJAX請求?

讓我知道什麼時候/如果我開始出問題了。

  • 我有一個特定的Servlet(AjaxServlet?),將處理所有Ajax請求
  • AjaxServlet映射到/ AJAX/*因此,所有的請求的URL如/ AJAX/getDataFromServer會被它處理
  • 我的doGet超越控制功能是一個長期的,如果/ ELSEIF鏈檢查request.getPathInfo()每次
  • 每個如果塊的doGet處理特定URL調用(/ AJAX/getDataFromServer)

我想回到JSON等遠遠我有我一直在建立這些字符串。有沒有我可以使用的輕量級JSON包。我知道我可能例如擴展ArrayList(ArrayListJson?)並添加toJson()方法,然後將任何ArrayList強制轉換爲ArrayListJson,但我相信這已經完成。

回答

4

你的基本的想法聽起來不錯,但建議最好有多個類,每處理自己的任務。我已經成功地使用了一種方法,即使用單個servlet攔截該調用,然後將該任務傳遞給其他實際執行的類。例如,您可以創建一個接口(命名爲AJAXHandler),該接口的方法爲public String performTask(HttpServletRequest request),並使用Servlet中的Factory Pattern實例化適當的類(實現AJAXHandler)並讓該類執行其工作。然後發送performTask方法(JSON字符串)的結果。當您需要實施新的AJAX調用時,您只需添加實現AJAXHandler的新類並使用新的類信息更新Factory。

對於JSON處理,我建議你看看JSON-簡單,在http://code.google.com/p/json-simple/

描述工廠模式在http://www.oodesign.com/factory-pattern.html

好運!

+0

那麼,肯定是創建一個Servlet來處理AJAX呢?我喜歡爲每個任務創建對象的想法,因爲通過將代碼保留在if塊之外並將其放在僅在需要時才實例化的類中,可以節省一些資源。你認爲這是一個巨大的性能增益,而不是在if/elsif塊中做所有事情? – Matthew

+2

@ user1038812它被稱爲「命令模式」。這不是爲了表現;沒有太多比if/else或switch語句更快。但速度的差異不大可能,但可維護性和可讀性的差異將會。 –

+0

與Dave的評論100%同意。你不會看到性能提升。事實上,它的速度會慢一點 - 但是可以忽略不計,甚至不足以考慮。代碼將更易於閱讀和維護,並且隨着您的前進,不太可能引入錯誤。 – Mike

0

如果您正在尋找一個輕量級解決方案來替換您的大IF塊,您可以使用反射根據請求參數調用對象上的方法。
作爲JSON的Java:http://json.org/java/

+0

使用對象而不是大if/elseif鏈是否有好處。我並不介意使用這種鏈式方法。只是爲了讓代碼更清潔一點嗎? – Matthew

0

我想說的是REST,而不是servlet上的long if/else if鏈,這也給了你更多的控制來組裝要使用的服務。