繁体   English   中英

如何在Front Controller Web应用程序中处理Http请求竞争条件?

[英]How do I handle Http request race conditions in a Front Controller web application?

我有一个Web应用程序,它是Front Controller Pattern的实现,如下图所示。 具体来说,我遵循了前端控制器模式的代码示例,如该问题的答案中所述:

基于Web的设计模式应用程序

前控制器

我的.jsp页面之一存在更新问题。 该页面特别具有弹出编辑器,允许用户从外部数据库添加或删除指向数据集的链接。 如果用户单击保存按钮,它将发送一个请求,该请求将被Front Controller拦截。 然后,在系统自己的数据库上执行用于保存或删除参考链接(许多ID号)的正确操作。 之后,应重新加载页面,这将触发链接的命令,该命令从两个数据库加载数据,然后重定向到基本上相同的页面,而没有弹出窗口。

但是,由于某种我不理解的缓存形式,因此无法重新加载该页面。 我尝试了所有可能找到的解决方案,以防止加载缓存的数据,向URL添加唯一值,在jsp页上添加元标记以完全阻止缓存。 我已经确认数据正在服务器端加载。 只需按一下F5键即可自动更新页面。

我还在弹出窗口上实现了onClose函数,该函数调用window.location.reload()。 但是,此调用会中断前端控制器,并停止当前正在执行的所有操作,以处理最新请求。 这会造成争用情况,在Front Controller开始重新加载页面之前,有时可以插入/删除数据,有时不能插入/删除数据。

我应该排队吗? 有充分的理由不这样做吗? Front控制器的执行方法还是类本身应该实现某种同步?

您的弹出式编辑器应放置在iframe中,这样它在提交时就不会重新加载窗口。 从iframe发送的请求返回的响应应触发window.location.reload()。 例如:

<html>
  <script type='text/javascript'>
    window.onload = function() {
      window.location.reload();
    };
  </script>
</html>

另一个选择是发送带有Ajax调用的更新,然后在Ajax调用返回时重新加载页面。 或者更好的方法是动态更新页面,而无需重新加载,而是使用Ajax调用返回的JSON数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM