假设您正在提交一个表单,这会影响您的数据库(添加记录/删除它们/更新它们),这就是您的请求的样子:
发布/应用程序/动作=更新
现在,假设您已完成更新,因此您希望将用户带到主页。
Response.sendRedirect /application/action=home
这工作得非常好。用户在 POST 之后会收到重定向,因此即使用户尝试通过按 F5 来刷新页面,你也很好。但是,如果您这样做,这将不起作用:
requestDispatcher.forward(/application/action=home)
鉴于在完成更新后您必须显示不同类型的错误/成功消息的情况下,您很可能在 POST 之后进行转发。在这种情况下,如何避免更新操作发生两次?
我觉得很有趣的是,许多安全网站(银行)/支付网关倾向于通过在屏幕上放置文本来通知用户,例如“请不要按返回/刷新按钮”。
有没有更好的方法来处理这个?除了要求用户不要按下这些按钮?当我上次检查时,有一个叫做“垂直响应缓存”的东西。一个过滤器,它将识别您的请求在会话中的唯一性,并在请求重复时尝试发送缓存的响应。有没有更简单的方法来解决这个经典问题?
这是我正在谈论的垂直响应缓存解决方案的链接:http ://www.fingo.info/en/articles/_1.html 。但是,我不确定这到底有多好。