Java 在Tomcat或Jetty上的SpringWeb应用程序控制器中进行基于事件的编程

Java 在Tomcat或Jetty上的SpringWeb应用程序控制器中进行基于事件的编程,java,spring,spring-mvc,Java,Spring,Spring Mvc,HTTP控制器(Spring)获取请求并进行阻塞调用。阻塞呼叫结束后,返回控制器 此时,我不想将响应发送回客户端,而是等待另一个事件(例如,某些处理的完成)发生。一旦该事件发生,我就需要一种从事件中收集数据的方法,然后用该数据返回HTTP响应 HTTPController doSomething( HTTPRequest ) { makeBlockingCall(); waitForEventToHappen(); collectDataFromEvent();

HTTP控制器(Spring)获取请求并进行阻塞调用。阻塞呼叫结束后,返回控制器

此时,我不想将响应发送回客户端,而是等待另一个事件(例如,某些处理的完成)发生。一旦该事件发生,我就需要一种从事件中收集数据的方法,然后用该数据返回HTTP响应

HTTPController doSomething( HTTPRequest ) 
{
    makeBlockingCall();  
    waitForEventToHappen();
    collectDataFromEvent();

    return HTTPResponse(); 

}

您不会在一个请求中就这样做,因为这可能最终会超时,并且在此之前不会向客户提供正在发生的事情的反馈

相反,您将立即显示一个页面,该页面异步(可能是按照AJAX)轮询服务器,以查看结果是否已经可用


因此,第一个请求将返回一个id,该id将在第二个(AJAX)请求中用于查找结果。

从标记中删除tomcat。关于这个问题,tomcat没有什么特别的。解决方案在tomcat中的行为与在任何其他web容器中的行为一样。事件发生得相当快(几秒钟之内),因此超时不是问题。@SoumyaSimanta但几秒钟对于同步处理来说是很长的时间。