Java SendRedirect";“防止重新提交”;放心?

Java SendRedirect";“防止重新提交”;放心?,java,servlets,Java,Servlets,您好,我是服务器端编程(java)新手,正在阅读SendRedirect和Forward之间的区别。 它解释说,这将阻止通过点击刷新按钮重新提交修改。但是,如果服务器端的后处理非常繁重,并且在服务器处理post期间以及在它发回3xx重定向之前,用户刷新页面,该怎么办?服务器如何知道忽略一行中的第二个传入请求 我明白你的意思,事实上,PRG保证只有在以前的重定向完成时,才能防止双重提交,包括“后退”按钮,因此浏览器现在可以发送get请求 但是如果在进行重定向之前运行了一个较长的进程,会发生什么情况

您好,我是服务器端编程(java)新手,正在阅读SendRedirect和Forward之间的区别。
它解释说,这将阻止通过点击刷新按钮重新提交修改。但是,如果服务器端的后处理非常繁重,并且在服务器处理post期间以及在它发回3xx重定向之前,用户刷新页面,该怎么办?服务器如何知道忽略一行中的第二个传入请求

我明白你的意思,事实上,PRG保证只有在以前的重定向完成时,才能防止双重提交,包括“后退”按钮,因此浏览器现在可以发送get请求

但是如果在进行重定向之前运行了一个较长的进程,会发生什么情况呢??

我有两种已知的方法来处理这种情况:

  • 如果在重定向之前有一个长时间的过程要做,那么PGR目标就不会得到满足,这是合乎逻辑的;因此,如果有人遇到这样的麻烦,<代码>,那么长时间的进程应该考虑在单独的线程< /代码>中运行,然后您可以简单地将重定向发送到一个可以向用户显示进度的页面(可选),这类似于Ajax。
  • 这一个我没有尝试过,但它确实是合乎逻辑的
    同步令牌模式
    ,因此它基本上是基于在页面中设置一个隐藏令牌,然后当POST请求发送到服务器时,您将以任意数量递增该令牌并
    将其存储到会话中
    ,因此,下次用户单击“提交”按钮或“刷新页面”时,您可以
    比较每次页面与会话中存储的令牌结算时得到的令牌,这是一种替代方法,您可以避免反复处理与同一用户关联的同一请求

我给你这个链接,如果你想了解更多

希望它有用