【问题标题】:Struts 1.x action is being called multiple timesStruts 1.x 动作被多次调用
【发布时间】:2015-09-24 17:45:03
【问题描述】:

我的应用程序使用的是 Struts 1.x,它在 WAS 上运行..

所有动作类都工作正常,除了一个我单击一个按钮并调用一个动作(预计将在 1 小时内完成)然后它开始执行..问题出现在几分钟后调用相同的动作时没有任何按钮触发或任何代码更改。每隔几分钟就会发生 n 次...

如果有人对此有任何想法,请告诉我。

【问题讨论】:

  • 您是否使用 IBM HTTP 服务器或其他配置了 WebSphere 插件的 Web 服务器?

标签: java ibm-was struts1 struts-action


【解决方案1】:

需要 1 小时 才能完成的请求是不正常的:您应该重新设计此功能。

简而言之,您遇到此问题是因为请求需要花费太多时间才能完成。有关问题原因的技术说明,请参阅Why does the user agent resubmit a request after server does a TCP reset?

解决方案:创建一个单独的线程(或并行线程池,如果可能)来处理长时间运行的计算,并立即发送一个响应页面,显示“请求已接受”。该页面还可以使用 JavaScript 定期发送“完成了吗?”向服务器请求。您还应该提供一种机制来查询挂起的请求,以便关闭浏览器的用户无需等待最终的“是的,完成!” response 可以在他们想要的时候得到结果。

【讨论】:

  • 我相信您指的是在执行方法中创建一个线程......但是该执行方法本身被多次调用
  • 该方法被多次调用,因为它占用的太多(请参阅我的答案中的链接)。如果为长时间运行的计算创建一个单独的线程,Struts 的动作可以很快终止,而无需等待其他线程。
  • 但它并没有等待那么久..每 5 分钟调用一次执行方法..这种情况重复大约 9-10 次
  • 说到Web应用的响应时间,5秒不算长(但很多人不同意),5分钟很长,1小时就像永远的等待。五分钟也是我链接的其他页面中描述的相同超时。您真的必须辞职并使用单独的线程进行长时间运行的计算。
猜你喜欢
  • 2013-12-24
  • 1970-01-01
  • 2011-08-17
  • 2012-02-15
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多