2010-08-11 78 views
0

我想对我的Java web应用程序进行AJAX调用。 Java web应用程序将在其他地方进行异步返回调用。该调用的结果将作为AJAX请求的结果返回。如何处理来自AJAX调用的异步Java调用

我的问题的症结是我会如何处理HttpRequest,而我正在等待第二次调用返回?

难道我只是阻止并等待AJAX​​处理程序方法中的调用,或者将请求存储在某处并等待回调?我将如何处理错误/超时?

对于那些谁关心更多的信息,我怎么来到这个情况如下:

这是一个基于XMPP即时消息系统的一部分。有一个全球支持用户在我们的webapp的每个页面上显示为一个图标。我也想显示这个用户的存在,所以,我可以使用IM系统来请求这个用户在每个用户的存在,每个用户和每个用户最终DDOS。相反,我想让一个用户定期从Web应用程序查询状态并缓存结果。

因此,AJAX调用的服务器将返回缓存状态或异步查询XMPP服务器。

+0

你可以澄清你正在谈论的** HttpRequest **吗?你在谈论Java中的** XMLHttpRequest **或** HttpServletRequest **吗? – 2010-08-11 16:06:55

回答

0

您不应该阻止并等待AJAX​​调用。也就是说,不要同步拨打电话。你应该在Java方面做的是找出一种方法来阻止你等待响应从你的异步调用回来(也就是说,找出一种方法使请求同步。性能将会在任何新的数据的第一个呼叫。随后的调用将打到缓存,所以你应该是好的)。您可以维护此数据的缓存,因此您可以先检查缓存以查看数据是否存在。如果它不进行调用并将结果存储在缓存中。否则,从缓存中获取数据并将其发送回视图。由于AJAX是异步的,只要数据从服务器返回,您的回调就会被调用。

+0

我从来没有打算阻止AJAX调用,但除此之外,这是我最终做的,因此代表是你的。谢谢大家。 – 2010-08-20 14:49:14

0

这里是我会做:

  • 当页面启动时,初始化的工作来获取你需要的特定网页数据数组,你需要确定工作,以便将来使用
  • 作业结果从页面
  • 使用AJAX来轮询作业结果,一旦任务完成,投票结束,并与数据
  • 缓存返回您所请求的Vivin表示
  • 缓存作业结果在服务器上的条目,给它一个超时选项
0

HTTP请求,即HttpServletRequest对象不可序列化。因此,在通话期间,您不能将它们存储在任何类型的持久存储中。无论如何,存储请求并不合理,因为HTTP协议的无状态特性使其生命期限于HTTP请求本身的持续时间。

这实际上意味着您必须在呼叫期间保留HttpServletResponse对象。 HttpServletRequest对象不再需要,一旦执行HTTP请求的解析,并且一旦所有数据都可用于您的应用程序;它是在你的上下文中重要的响应对象。

响应可以使用用户状态的缓存副本填充。如果缓存中的副本已过时,则可能需要从XMPP服务器同步刷新(毕竟,它仅影响一个页面加载的性能)。您可以从应用程序服务器中异步查询,但必须将某些结果返回给浏览器(因此可能需要处理几个边缘情况)。