在返回响应之前获取servlet请求的状态

时间:2010-06-14 20:16:36

标签: java javascript jsp servlets struts2

晚上好,

我正在编写Java Servlet(Struts 2,Tomcat,JSP等),它能够进行一些相当复杂的模拟。这些最多可能需要2分钟才能完成,并将返回结果图表。计算完成的模拟百分比是微不足道的,因为该过程通过重复相同的计算1000次来工作。

我很想知道是否有人试图使用客户端技术来提供完成百分比的任何估计。即,查询servlet处理以获得在整个模拟中的各个点处完成的循环数。然后,这可以在客户端浏览器中显示为条形。

任何想法,建议和资源都会非常感激。

谢谢,

亚历

4 个答案:

答案 0 :(得分:4)

在您的数据库中,有一个表来维护模拟列表及其服务器计算的进度。

在您的网络应用程序中,每隔几秒钟使用AJAX查询服务器(1-20取决于负载是我要使用的)并更新图形进度条。大多数javascript库都有简单的基于计时器的AJAX函数来完成这类工作。

有一些细节要弄清楚,比如完成的模拟是否保留在数据库中(可能是有用的日志信息),但总的来说,这应该相当简单。

答案 1 :(得分:4)

您可以将响应封装在mime / multipart消息中并发送更新,直到完成完整响应为止。

Bugzilla在搜索中使用它来显示“搜索...” - 屏幕直到搜索结果完成。

答案 2 :(得分:2)

如果你想使用普通的Struts2,你应该看一下ExecuteAndWait Interceptor

它适用于旧的 refresh-with-timeout 方法。当然,它比一些AJAX的东西具有更低的凉爽系数,但它很简单并且有效(我已经使用过它)。

Struts2负责(通过使用此拦截器)在单独的线程中执行action方法(通常需要很长时间),并返回特殊结果wait,直到工作完成。你只需要为这个结果编写一个显示一些“等待...”消息的jsp代码,然后重复刷新同样的动作,比如(比方说)两到三秒的超时。当然,jsp可以访问动作属性,因此您可以编写一些getProgress()方法来显示进度消息或条形。

答案 3 :(得分:0)

AJAX是去这里的方式。