我可以检查是否完成了异步请求吗?

时间:2013-03-16 06:54:25

标签: java servlets asynchronous httprequest httpresponse

有没有办法检查AsyncContext是否完成了异步ServletRequest?我看到春天有某种wrapper that supports this但谷歌搜索我在标准库中找不到任何东西。这就是我所希望的。

我正在使用Tomcat 7.

2 个答案:

答案 0 :(得分:2)

听起来像两个中的一个 - 你需要一个监听器,它将在异步请求完成后调用,或者你不需要使用异步调用

你的问题有点过于笼统。

通常说话 - 当呼叫者对呼叫的直接结果不感兴趣时​​,使用异步呼叫。 如果呼叫者有兴趣立即知道呼叫结果,则应使用同步呼叫。 如果调用者不想立即知道结果(例如它具有次要优先级,如登录某些业务应用程序),但是应该在执行异步调用时执行某些操作,您应该使用某种监听器

异步调用所需要的是一些侦听器(类javax.servlet.AsyncListener)。

侦听器中,您将确定异步调用已结束(onComplete方法)并可执行某些操作以完成/补充异步调用


同样,如果您看到请求的调用者需要立即知道结果,那么您的体系结构可能存在错误。你应该使用同步通话 - 只要等到通话结束,你就会得到它的结果。在这种情况下,使用异步调用是错误的。


我看到人们如何使用某种循环来不时检查异步调用的结果,但看起来在99.99%的情况下这种方法是某种架构的结果错误。

答案 1 :(得分:1)

您可以注册AsyncListener,它可以实现onComplete()方法。

需要将AsyncListener添加到AsyncContext。