2013-06-01 2 views

ответ

0

Вот объяснение, которое я нашел, которое могло бы объяснить это. Это помогло мне, когда я нуждался в его

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

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

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

Является ли ваша форма использованием метода GET, изменяющим его на POST, самым простым решением, поскольку это, по крайней мере, означает, что пользователь предупреждается, если он пытается обновить.

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

+0

@StackOverflow на самом деле? вы действительно получили его? Этот ответ ничего не делает для вашей проблемы IMO – kolossus

0

Используйте указатель include <%@ include/> в отношении тега <jsp:include/>, который вы используете сейчас.

<jsp:include/> будет инструктировать Jsp выполнения, чтобы пойти и принести включенный ресурс каждый компилятор попадается что тег (первый рабочий день запросов, обновляемая) в то время как <@ include/> означает, что включен ресурс встроен в родительский ресурс при компиляции

Разница заключается в том, что директива включает время компиляции. Это означает, что содержание директивы (в вашем случае scripts.jsp) испечено в родительский jsp (и в конечном итоге сервлет, который будет скомпилирован jsp). Эффект заключается в том, что включенный файл читается только при первом рендеринге родительского jsp.

Что вы должны иметь:

<%@ include page="../include/scripts.jsp" /> 

Связанный:

Смежные вопросы