【问题标题】:Use a Servlet to handle AJAX requests?使用 Servlet 处理 AJAX 请求?
【发布时间】:2011-12-26 14:39:53
【问题描述】:

基本上是一个是或否的问题,但我也在寻找有关实施最佳实践的建议。

让我知道何时/如果我开始出错。

  • 我有一个特定的 Servlet (AjaxServlet?) 可以处理所有 AJAX 请求
  • AjaxServlet 映射到 /ajax/*,因此 /ajax/getDataFromServer 等所有请求 URL 都将由它处理
  • 我的 doGet 覆盖函数是一个很长的 if/elseif 链,每次都会检查 request.getPathInfo()
  • doGet 中的每个 if 块都处理一个特定的 url 调用 (/ajax/getDataFromServer)

我想返回 JSON,到目前为止,我一直在自己构建这些字符串。有没有我可以使用的轻量级 JSON 包。我知道我可以例如扩展 ArrayList (ArrayListJson?) 并添加一个 toJson() 方法,然后将任何 ArrayList 转换为 ArrayListJson,但我确信这已经完成了。

【问题讨论】:

    标签: java javascript ajax servlets


    【解决方案1】:

    您的基本想法听起来不错,但最好有多个类,每个类处理自己的任务。我成功使用的一种方法是使用单个 servlet 来拦截调用,然后将任务传递给其他一些实际执行实现的类。例如,您可以创建一个具有public String performTask(HttpServletRequest request) 方法的接口(例如,命名为 AJAXHandler),并在您的 servlet 中使用工厂模式来实例化适当的类(实现 AJAXHandler)并让该类完成其工作。然后将 performTask 方法的结果(JSON 字符串)发送出去。当您需要实现新的 AJAX 调用时,您只需添加实现 AJAXHandler 的新类并使用新的类信息更新 Factory。

    对于 JSON 处理,我建议你看看 json-simple,http://code.google.com/p/json-simple/

    工厂模式在http://www.oodesign.com/factory-pattern.html进行了描述

    祝你好运!!!

    【讨论】:

    • 那么,创建一个 Servlet 来处理 AJAX 是肯定的吗?我喜欢为每个任务创建对象的想法,因为这样可以节省一些资源,方法是将代码保留在 if 块之外,并将其放置在仅在请求时才实例化的类中。与在 if/elsif 块中执行所有操作相比,您认为这是一个巨大的性能提升吗?
    • @user1038812 它被称为“命令模式”。它不是为了性能而做的;没有比 if/else 或 switch 语句快多少。但速度上的差异不太可能有影响,而可维护性和可读性的差异则很重要。
    • 100% 同意戴夫的评论。您根本不会看到性能提升。事实上,它会慢一点——但是这可以忽略不计,甚至不足以考虑。代码将更易于阅读和维护,并且随着您的前进,引入错误的可能性也更小。
    • 我们是否也应该将HttpServletResponse 传递给performTask 方法?这样我们就可以从对象中调用response.sendError 之类的东西?还是最好只在 Servlet 中处理 ServletResponse
    【解决方案2】:

    如果您正在寻找一种轻量级的解决方案来替换您的大 IF 块,您可以使用反射根据请求参数调用对象上的方法。
    至于java的json:http://json.org/java/

    【讨论】:

    • 使用对象而不是大的 if/elseif 链有什么好处。我真的不介意使用这种链式方法。只是为了让代码更干净一点吗?
    【解决方案3】:

    我会说使用 REST 而不是 servlet 上的长 if/else if 链,这也使您可以更好地控制组装要使用的服务。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2018-10-17
      • 2012-11-24
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多