Скажем, вы отправляете форму, которая влияет на вашу базу данных (добавляет записи/удаляет их/обновляет), и вот как выглядит ваш запрос:
POST/application/action = update
Теперь, скажем, вы закончили с обновлением, поэтому вы хотели бы завести пользователя на домашнюю страницу.
Response.sendRedirect/application/action = home
Это прекрасно работает. Пользователю отправляется перенаправление после POST, поэтому, даже если пользователь пытается обновить страницу, нажав F5, вы в порядке. Однако это не будет работать, если вы это сделаете:
RequestDispatcher.forward(/приложение/действие = дом)
Учитывая, что существует сценарий, в котором вы должны отображать различные сообщения об ошибках/успехе после того, как вы закончите с вашим обновлением, вы, скорее всего, выполняете пересылку после POST. В таком сценарии, как вы избегаете повторных действий по обновлению?
Я считаю довольно забавным, что многие защищенные сайты (банки)/платежные шлюзы, как правило, информируют пользователя, помещая текст на экран, например "Пожалуйста, не нажимайте кнопки" Назад/Обновить ".
Нет ли лучшего способа справиться с этим? Помимо запроса пользователю не нажимать эти кнопки? Когда я последний раз проверял, было что-то, называемое "Вертикальный ответный кэш". Фильтр, который идентифицирует уникальность вашего запроса в сеансе и пытается отправить кешированный ответ, если запрос дублируется. Существуют ли более простые способы решения этой классической проблемы?
Вот ссылка на решение кеша вертикального ответа, о котором я говорил: http://www.fingo.info/en/articles/_1.html. Я, однако, не уверен, насколько это действительно работает.