powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Refresh - как уйти от дублирования запроса?
6 сообщений из 6, страница 1 из 1
Refresh - как уйти от дублирования запроса?
    #33906852
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Классический вопрос, при передаче запросод или работе с БД с ним тяжело не встретиться, но все же ...

Проект: несколько JSP-шек, управляемых сервлетом, работающим с БД.

Проблемка: при получении запроса из одной JSP сервлет вставляет данные в БД и вызывает другую JSP. Находясь в вызванной JSP нажимаем F5 (Refresh) и получаем дубль записи данных в БД, то есть сервлет повторно выполнил последний запрос. По старой памяти я добавил в запрос рандом-параметр, но суть проблемы от этого не поменялась.

Подскажите, что надо сделать, чтобы обезопасить себя от подобных "проявлений сервиса"?
...
Рейтинг: 0 / 0
Refresh - как уйти от дублирования запроса?
    #33907034
ufga
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Refresh - как уйти от дублирования запроса?
    #33907155
dominator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут надо применить шаблон синхронизирующий маркер
Суть его в следующем при отправке формы клиенту генерится маркер (случайная величина). Маркер заносится в сессию на сервере а также как скрытый параметр выводится на форму клиенту. Как только получаем первый раз форму сравниваем маркер в сессии и полученный от клиента если они равны выполняем добавление в базу и меняем маркер в сессии если клиент жмет рефрешь то со страницы отправляется старый маркер который не совпадет с маркером в сессии и в базу ничего ни пишем
...
Рейтинг: 0 / 0
Refresh - как уйти от дублирования запроса?
    #33909349
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок.
Ссылки, в принципе, бестолковые, но хотя бы понял, куда смотреть.
Кстати, перед тем, как задавать вопрос, перелопатил не одну сотню страничек.

JSP:
...
<% String randomStr = String.valueOf((new java.util.Random()).nextInt());%>
<% session.setAttribute("sessionAttr", randomStr); %>
...
<input type=hidden name=formAttr value="<%= randomStr %>"/>
...

servlet:
...
String sessionAttr = (String) _request.getSession().getAttribute("sessionAttr");
String formAttr = _request.getParameter("formAttr");
if (sessionAttr != null && formAttr != null) {
if (!sessionAttr.equals(formAttr)) isnotRefresh = false;
}
...

Поэтому все равно большое спасибо!
...
Рейтинг: 0 / 0
Refresh - как уйти от дублирования запроса?
    #33909447
moveton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IDVsbruckОк.
Ссылки, в принципе, бестолковые, но хотя бы понял, куда смотреть.
Кстати, перед тем, как задавать вопрос, перелопатил не одну сотню страничек.

JSP:
...
<% String randomStr = String.valueOf((new java.util.Random()).nextInt());%>
<% session.setAttribute("sessionAttr", randomStr); %>
...
<input type=hidden name=formAttr value="<%= randomStr %>"/>
...

servlet:
...
String sessionAttr = (String) _request.getSession().getAttribute("sessionAttr");
String formAttr = _request.getParameter("formAttr");
if (sessionAttr != null && formAttr != null) {
if (!sessionAttr.equals(formAttr)) isnotRefresh = false;
}
...

Поэтому все равно большое спасибо!

isnotRefresh - моветон. по-русски - гавно. java-код в JSP - моветон, по-русски - уже сказал. isnotRefresh должен быть isRefresh. isNotValid должен быть isValid, isNotRed должен быть isRed. напишите этот текст 25 раз, нажимая одним пальцем любой руки клавиши, в любом текстовом редакторе, тщательно проговаривая слова. должен быть стиль. должно быть красиво. ява - все же женского рода. не надо ее уродовать толстыми мужскими грубыми пальцами.
...
Рейтинг: 0 / 0
Refresh - как уйти от дублирования запроса?
    #33909482
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... улыбнулся в ответ ... даже не хочется добавлять что-либо (может, и не красиво, но логика прежде всего) ...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Refresh - как уйти от дублирования запроса?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]