Как избежать, повторно отправляют в jsp когда обновление?

Источник семени не так очень важен. Более важный псевдо алгоритм генератора чисел. Однако я услышал некоторое время назад о генерации семени для некоторых банковских операций. Они взяли много факторов вместе:

  • время
  • температура процессора
  • скорость вентилятора
  • напряжение CPU
  • я не помню больше :)

, Даже если некоторые из этих параметров не изменяются очень вовремя, можно поместить их в некоторую хорошую хеш-функцию.

, Как генерировать хорошее случайное число?

, Возможно, мы можем принять во внимание inifinite количество вселенных? Если это верно, это все время, новые параллельные вселенные создаются, мы можем сделать что-то вроде этого:

int Random() {
    return Universe.object_id % MAX_INT;
}

В каждый момент мы должны быть на другом ответвлении параллельных вселенных, таким образом, у нас должен быть другой идентификатор. Единственная проблема состоит в том, как получить объект Вселенной :)

20
задан MemoryLeak 23 August 2009 в 01:17
поделиться

4 ответа

Вот объяснение проблемы .. .

При нажатии кнопки «Отправить» в форме на веб-сервер отправляется запрос, содержащий все данные, введенные в форму. Не только URL-адрес, но и данные формы являются частью запроса, и этот запрос запоминается браузером. Если пользователь нажимает «обновить», браузер повторяет запрос, отправляя те же данные формы URL и на веб-сервер снова.

Но формы могут быть отправлены двумя разными способами: GET или POST, в зависимости от атрибута "method" тега "form". Существует соглашение, что запрос GET не имеет побочных эффектов; он только извлекает данные, но не вносит никаких изменений в базу данных. С другой стороны, если запрос изменяет данные, он всегда должен использовать запрос POST. Как я уже сказал, это всего лишь условные обозначения, и между ними нет особой технической разницы, но очень важное различие состоит в том, что браузеры будут предупреждать пользователя, если они попытаются повторить POST - при нажатии на кнопку «обновить» появится диалоговое окно. предупреждение пользователя о том, что это может вызвать повторение операции, и подтверждение того, что он действительно хочет выполнить повторную отправку. Браузер не показывает это подтверждение при обновлении запроса GET.

Использует ли ваша форма метод GET, как подозревает @mk? Если да, то изменить его на POST - самое простое решение, поскольку это будет как минимум означать, что пользователь будет предупрежден, если он попытается выполнить обновление.

Но лучшим решением является идиома POST + REDIRECT + GET, предложенная @cletus. Это разделяет обновление базы данных (POST) и представление (GET) на две операции. При нажатии кнопки «Обновить» в браузере просто повторяется команда GET, которая не имеет побочных эффектов.

21
ответ дан 30 November 2019 в 00:19
поделиться

Здесь вам нужна идиома:

  1. POST + REDIRECT + GET ; или
  2. отправка формы AJAX.

POST + REDIRECT + GET работает следующим образом:

  1. отправка форм использует метод POST;
  2. Когда JSP или (надеюсь) сервлет получает POST, он делает все, что ему нужно делать (сохраняет или обновляет данные или что-то еще);
  3. Сервлет или JSP затем используют HTTP-заголовок Location: для перенаправления пользователя на тот же URL-адрес.

Преимущество этого заключается в том, что при нажатии на перезагрузку не выполняется повторно отправьте форму. Также, если вы нажмете кнопку «Назад» в браузере, вам не будет предложено «отправить снова?» диалоговое окно.

Вот пример JSP этого.

Отправка AJAX означает, что вместо отправки формы обратно на сервер в традиционном смысле вы создаете запрос AJAX обратно на сервер с данными формы. Этот submit делает то, что ему нужно. При нажатии кнопки «Обновить» страница просто перезагружается. Он не будет повторно отправлять запрос AJAX.

13
ответ дан 30 November 2019 в 00:19
поделиться

Не используйте GET для отправки или иного изменения данных. Вместо этого используйте POST. Вы захотите изменить форму, чтобы читать

<form action="test.jsp" method="get">

См. http://www.google.com/search?q=get+post для получения дополнительной информации.

(Ваш вопрос также является немного неясно - вы имеете в виду обновление в браузере или в контейнере (например, Tomcat)? Что вы имеете в виду, повторно отправьте страницу? Страницы не отправляются, а формы отправляются. Какая система? Я догадался, что вы имели в виду, если вы что-то имели в виду в противном случае дайте нам знать.)

0
ответ дан 30 November 2019 в 00:19
поделиться

ЕСЛИ вы используете JSP на стороне сервера и используете сервлет контроллера для управления направлением страницы. Вы можете просто изменить режим направления страницы с «Вперед» на «Перенаправление страницы». Таким образом вы можете предотвратить повторную отправку формы. это было бы полезно понять

с уважением!

0
ответ дан 30 November 2019 в 00:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: