【发布时间】:2013-03-16 06:54:24
【问题描述】:
有什么方法可以检查异步 ServletRequest 是否从 AsyncContext 完成?我看到 spring 有某种wrapper that supports this 但在谷歌上搜索我在标准库中找不到任何东西。这就是我所希望的。
我正在使用 Tomcat 7。
【问题讨论】:
标签: java servlets asynchronous httprequest httpresponse
有什么方法可以检查异步 ServletRequest 是否从 AsyncContext 完成?我看到 spring 有某种wrapper that supports this 但在谷歌上搜索我在标准库中找不到任何东西。这就是我所希望的。
我正在使用 Tomcat 7。
【问题讨论】:
标签: java servlets asynchronous httprequest httpresponse
听起来像是两者之一 - 您要么需要一个 listener,它会在 异步请求 完成时被调用,要么您不需要使用 异步调用。
你的问题有点笼统。
一般说 - 异步调用在调用者对调用的即时结果不感兴趣时使用。 如果调用者有兴趣立即知道调用的结果,那么应该使用同步调用。 如果调用者不想立即知道结果(例如它具有次要优先级,例如登录某些业务应用程序),但应该在 异步调用 执行结束时执行一些操作,您应该使用某种监听器。
异步调用需要一些侦听器(属于 javax.servlet.AsyncListener 类)。
在 listener 中,您将确定 异步调用 已结束(onComplete 方法)并可能执行一些操作来完成/补充 异步调用。
同样,如果您看到请求的调用者需要在完成后立即知道结果,那么您的架构中可能存在错误。您应该使用同步调用 - 只需等到调用完成,您就会得到它的结果。在这种情况下使用异步调用是错误的。
我看到人们如何使用某种循环来不时检查异步调用的结果,但在 99.99% 的情况下,这种方法似乎是某种架构的结果错误。
【讨论】:
你可以注册AsyncListener,它可以实现onComplete()方法。
AsyncListener 需要添加到 AsyncContext。
【讨论】: