|
|
|
Refresh - как уйти от дублирования запроса?
|
|||
|---|---|---|---|
|
#18+
Классический вопрос, при передаче запросод или работе с БД с ним тяжело не встретиться, но все же ... Проект: несколько JSP-шек, управляемых сервлетом, работающим с БД. Проблемка: при получении запроса из одной JSP сервлет вставляет данные в БД и вызывает другую JSP. Находясь в вызванной JSP нажимаем F5 (Refresh) и получаем дубль записи данных в БД, то есть сервлет повторно выполнил последний запрос. По старой памяти я добавил в запрос рандом-параметр, но суть проблемы от этого не поменялась. Подскажите, что надо сделать, чтобы обезопасить себя от подобных "проявлений сервиса"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 03:24 |
|
||
|
Refresh - как уйти от дублирования запроса?
|
|||
|---|---|---|---|
|
#18+
google: get after post ---- http://adamv.com/dev/articles/getafterpost http://www.theserverside.com/tt/articles/article.tss?l=RedirectAfterPost ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 09:24 |
|
||
|
Refresh - как уйти от дублирования запроса?
|
|||
|---|---|---|---|
|
#18+
Тут надо применить шаблон синхронизирующий маркер Суть его в следующем при отправке формы клиенту генерится маркер (случайная величина). Маркер заносится в сессию на сервере а также как скрытый параметр выводится на форму клиенту. Как только получаем первый раз форму сравниваем маркер в сессии и полученный от клиента если они равны выполняем добавление в базу и меняем маркер в сессии если клиент жмет рефрешь то со страницы отправляется старый маркер который не совпадет с маркером в сессии и в базу ничего ни пишем ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 10:12 |
|
||
|
Refresh - как уйти от дублирования запроса?
|
|||
|---|---|---|---|
|
#18+
Ок. Ссылки, в принципе, бестолковые, но хотя бы понял, куда смотреть. Кстати, перед тем, как задавать вопрос, перелопатил не одну сотню страничек. 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; } ... Поэтому все равно большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 21:34 |
|
||
|
Refresh - как уйти от дублирования запроса?
|
|||
|---|---|---|---|
|
#18+
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 раз, нажимая одним пальцем любой руки клавиши, в любом текстовом редакторе, тщательно проговаривая слова. должен быть стиль. должно быть красиво. ява - все же женского рода. не надо ее уродовать толстыми мужскими грубыми пальцами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 23:49 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33907155&tid=2148453]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
165ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
24ms |
get tp. blocked users: |
1ms |
| others: | 252ms |
| total: | 481ms |

| 0 / 0 |
