Чтобы решить проблему повторного представления формы в проектах, в обычных проектах существуют следующие ситуации, где может возникнуть повторная подача формы, например:
1. Из -за медленной задержки сервера или сети, нажимайте кнопку «Отправить»
2. Представление было успешно завершено, но успешная страница была обновлена
3. Представление было успешно завершено. Снова вернувшись, нажмите кнопку «Отправить».
Все эти ситуации могут привести к тому, что в базе данных и отходах базы данных слишком много избыточных данных. Только пересылка появится, а перенаправление не будет.
Решение для первого случая (с использованием JavaScript) не работает для последних двух:
Сначала добавьте код JavaScript в следующем формате на страницу
var OpportFlag = false; function chectsubmit () {if (! OpportFlag) {OpportFlag = true; document.forms [0] .submit (); }}(1) Когда атрибут типа кнопки «Отправить» - это кнопка:
Просто установите кнопку Onclick = ”CheckSubmit ();”.
(2) Когда атрибут типа кнопки «Отправить» отправлен:
Установите кнопку onclick = "checksubmit ();" и добавить onsubmit = "returnfalse" к тегу <Form>. Поскольку когда кнопка отправки автоматически отправлена, после отправки события Click, OnSubmit установлен на «returnFalse», автоматическое представление кнопки отправки будет недействительным.
Для следующих двух ситуаций вы можете использовать сеанс для решения проблемы. Принцип состоит в том, чтобы разместить информацию в сеансе при запуске страницы «Добавление информации», а затем отправьте информацию в сервл для обработки на странице. Сервлет получает информацию в сеансе. Если в сеансе есть информация, которая не является пустой, вставьте информацию в базу данных, а затем удалите информацию в сеансе. Информация в сеансе пуста в следующий раз, когда будет отправлена форма, тогда хранящий информационный процесс не будет выполнен.
Однако простое использование сеанса имеет свои ограничения, поэтому в реальной разработке он обычно используется для использования сеанса в сочетании с UUID для решения повторных представлений форм. Код заключается в следующем:
Определите класс Uuidtoken
открытый класс uuidtoken {private uuidtoken uuidtoken = new uuidtoken (); private uuidtoken () {} public uuidtoken getuuidtoken () {return uuidtoken;} public synchronized string getUuidasstr (httpserveltrequest) {httpsessessessessessessessessessessestions. uuidstr = uuid.randomuuid (). toString (); if (uuidstr! = null) {session.setattribute ("session.uuid", uuidstr);} uuidstr;}/*** определить, сохраняется ли Uuid в сеансе и uuid на странице JSP isuuidvalidate (httpservlectrequest) {// Получить существующий сеанс httpsession session = request.getsession (false); if (session == null) {return false;} string sessionuid = (string) session.getattribut htmlluuid = request.getParameter ("html.uuid"); if (htmlluuid == null) {return false;} return sessionuuid.equals (htmlluuid);}/** * Удалить uuid */public synchronize void sresetuuid (htttpserveltrecestessessessessessestessessessessestessessessessest session = request.getSession (false); if (session == null) {return;} session.removeattribute ("session.uuid");}}Добавьте скрытый домен на страницу JSP, используйте UUID, чтобы сгенерировать уникальный идентификационный номер, назначьте его скрытому домену и поместите уникальный идентификационный номер в копию сеанса. Код заключается в следующем:
<input type = "hidden" name = "html.uuid" value = '<%= uuidtoken.getuuIidtoken (). getUuidasstr (запрос)%>'>
После отправки в сервлет получите значение скрытого домена страницы JSP и сравните значение скрытого домена со значением, размещенным в сеансе. Если то же самое, сохраните данные и удалите UUID из сеанса. Если это не то же самое, это означает, что это повторное представление и не выполняется обработка.
Boolean flag = uuidtoken.getuuIidtoken (). Isuuidvalidate (request); if (flag) {// Сохранить информацию в базу данных // delete uuidtoken.getuuuidtoken (). ResetUuid (запрос);} else {System.println ("Повторяемое представление");};Суммировать
Вышеупомянутое дело о кратком обсуждении этой статьи об использовании сеанса для предотвращения повторных представлений форм. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!