Struts2 + jQuery - 定期向客户端发送更新

发布于 2024-08-04 12:28:38 字数 361 浏览 6 评论 0原文

我正在我的网络应用程序中实现一项功能,以便客户端可以通过输入一些数据并单击提交按钮来生成报告。

问题是报告生成需要大量时间,并且如果用户输入的数据错误,则可能无法生成报告。

完整的报告生成任务有许多子任务,我希望当客户按下提交时,然后在该页面下方我想显示拆分为各种子任务的报告生成任务的状态/进度,例如

- Validating input data ------ Done
- Fetching the data     ------ In Progress
 and so on,

如何使用 Struts2 实现此目的、jQuery在web层?

任何帮助将不胜感激。

谢谢

I am implementing a functionality in my web app such that a client can generate the report by entering some data and clicking on the submit button.

The problem is that report generation takes lot of time and the report might not generate if the user entered data is wrong.

The complete report generation task has many sub-tasks and I want when the client presses submit then just below that page I want to show the status/progress of the report generation tasks splitted in various sub-tasks like

- Validating input data ------ Done
- Fetching the data     ------ In Progress
 and so on,

How can I achieve this using Struts2, jQuery in the web layer?

Any help will be greatly appreciated.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

少女的英雄梦 2024-08-11 12:28:38

我们也有类似的问题。交易通常需要 20 秒,有时甚至超过一分钟。我们认为会有更简单的解决方案,但我们最终得到了这样的方案,

  1. 当收到长时间运行的请求时,会创建一个会话并生成一个新线程来处理该请求。
  2. 立即返回一个页面,其中包含显示“正在收集数据...”的文本。该页面包含一个计时器,每秒刷新一次。重新加载 URL 在查询参数中包含会话 ID(我们不使用 HttpSession)。
  3. 当操作处理程序看到带有会话 ID 的请求时,它知道会话已启动,检查工作线程正在更新的状态变量。如果未完成,它会使用新状态“正在从 DB1 检索数据...”更新页面。重新加载时会出现闪烁。如果您愿意,可以使用 AJAX 来更新状态。
  4. 当工作线程完成并且页面准备好交付时,调用仅返回结果。

我们在负载平衡器方面遇到了一些问题。为了使该方案发挥作用,每次重新加载都必须返回到同一服务器。幸运的是,负载均衡器支持基于会话 ID 的粘性路由。

We had a similar problem. The transaction normally takes 20 seconds, sometimes over a minute. We thought there would be easier solutions but we ended up with a scheme like this,

  1. When the long running request is received, a session is created and a new thread is spawn to handle the request.
  2. A page is immediately returned with text to display "Collecting data ...". The page contains a timer to refresh itself every second. The reload URL contains the session ID (we don't use HttpSession) in the query parameter.
  3. When the action handler sees the request with a session ID, it knows the session is started, check a state variable being updated by the working thread. If it's not done, it updates the page with new status "Retrieving data from DB1 ...". There is flickering when this is done as reload. If you care, you can use AJAX to update the status.
  4. When the working thread is done and the page is ready to deliver, the call simply returns the result.

We ran into some problem with the load-balancer. For the scheme to work, every reload must come back to the same server. Fortunately, the load-balancer supports sticky routing based on our session id.

猛虎独行 2024-08-11 12:28:38

Take a look at the Struts2 ExecuteAndWait interceptor. http://struts.apache.org/2.x/docs/execute-and-wait-interceptor.html

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文