【问题标题】:How to avoid duplicate request?如何避免重复请求?
【发布时间】:2009-08-20 08:35:13
【问题描述】:

如果我点击一个链接,我会调用一个 servlet。

是否有可能通过过滤器或其他方式跟踪重复请求,以便避免碰到 servlet?

【问题讨论】:

    标签: java sql-server


    【解决方案1】:

    通常您会在链接中添加某种“请求标识符”,例如一个 GUID。您要么懒惰地跟踪您已经看到的标识符(并忽略该集合中的任何内容),要么跟踪您已生成但未看到的标识符(并忽略其中的任何 not设置)。

    【讨论】:

    • @Steve - 这通常是表单帖子的问题,其中 GUID 作为隐藏输入而不是 URL 中的参数包含在内。
    • @Steve:我想说这是问题中固有的问题。 OP 需要小心他所做的事情。不过,总会有一些本质上“不可共享”的链接。
    【解决方案2】:

    您真的想为每个请求都这样做吗?如果您不这样做,请使用 Jon 的答案中的第一个解决方案,并忽略没有 guid 的内容。

    你可以很容易地在 javascript 中做到这一点。点击任何链接后,防止它再次被点击:(使用一些 YUI):

    YAHOO.util.Event.onDOMReady(function(){
      function killIt(e){
        YAHOO.util.Event.stopEvent(e);
      }
    
      var anchors = document.getElementsByTagName('a');
      for(var i = 0; i < anchors.length; i++){
         YAHOO.util.Event.addListener(anchors[i], 'click', function(e){
           var el = YAHOO.util.Event.getTarget(e);
           YAHOO.util.Event.removeListener(el, 'click'); // kill existing handle
           YAHOO.util.Event.addListener(el, 'click', killIt); // kill any future clicks
         });
       }
    });
    

    您也可以在单击它时禁用然后锚点。有点不同。直截了当,仅在您希望单击仅启用的锚上实现此功能。

    【讨论】:

      【解决方案3】:

      绝对没有理由仅仅为了动态禁用链接而使用庞大的 Javascript 框架。

      <a href="/test" onmouseup="this.href='';" />
      

      完成。

      【讨论】:

        【解决方案4】:

        我喜欢这个:

         onmouseup="this.style.display='none';"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-28
          • 2021-03-12
          • 2016-01-26
          • 2017-06-06
          • 1970-01-01
          • 2016-10-15
          • 1970-01-01
          相关资源
          最近更新 更多