2011-05-10 24 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多线程安全的。