1, установите переменную и разрешите отправку только один раз.
вар checkSubmitFlg = false;
функция checkSubmit() {
if (checkSubmitFlg == true) {
return false;
}
checkSubmitFlg = true;
return true
}
document.ondblclick = function docondblclick() {
window.event .returnValue = false
}
document.onclick = function doconclick() {
if (checkSubmitFlg) {
window.event.returnValue = false
}
;
2 Все еще используя JavaScript, отключите кнопку отправки или изображение
onsubmit = "getElById('submitInput').disabled = true; return true;"> < / html:form> 3. Использование механизма токенов синхронизации Struts для решения проблемы повторных отправок данных в веб-приложениях. Struts также предоставляет эталонную реализацию. Основной принцип: перед обработкой входящего запроса сервер сравнивает значение токена, содержащееся в запросе, со значением токена, сохраненным в текущем сеансе пользователя, чтобы увидеть, есть ли совпадение. После обработки запроса и до отправки ответа клиенту будет сгенерирован новый токен. Этот токен не только будет передан клиенту, но и заменит старый токен, сохраненный в сеансе пользователя. Таким образом, если пользователь вернется на предыдущую страницу отправки и повторит отправку, токен, переданный клиентом, будет несовместим с токеном на стороне сервера, что эффективно предотвратит повторную отправку. if (isTokenValid(request, true)) { // ваш код return Mapping.findForward("success" } else { saveToken(request); return Mapping.findForward("submitagain" } Struts на основе сеанса пользователя ID и текущее системное время используются для создания уникального (для каждого сеанса) токена. Для конкретной реализации обратитесь к методуgenerToken() в классе TokenProcessor. 1. //Проверка токена управления транзакцией. 2. В действии: // // value="6aa35341f25184fd996c4c918255c3ae"> if (!isTokenValid(request)) error.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.transaction.token") ) ; resetToken(request); //Удалить токен в сеансе 3. В действии есть метод для создания защищенной токена StringgenerateToken(HttpServletRequest request) { HttpSession session = request.getSession(); try { byte id[] = session.getId; ().getBytes(); byte now[] = new Long(System.currentTimeMillis()).toString().getBytes(); MessageDigest md = MessageDigest.getInstance("MD5"); md.update(id) md .update(сейчас); return (toHex(md.digest())); } catch (IllegalStateException e) { return (null) ; catch (NoSuchAlgorithmException e) { return (null } } ;