프로젝트에서 반복 형식 제출 문제를 해결하기 위해, 반복 된 양식 제출이 발생할 수있는 일반 프로젝트에는 다음과 같은 상황이 있습니다.
1. 서버가 느리거나 네트워크 지연으로 인해 제출 버튼을 반복적으로 클릭하십시오.
2. 제출물이 성공적으로 완료되었지만 성공적인 페이지가 새로 고침되었습니다.
3. 제출이 성공적으로 완료되었습니다. 뒤로 떨어지면 제출 버튼을 다시 클릭하십시오.
이러한 모든 상황은 데이터베이스 및 폐기물 데이터베이스 리소스에서 동일한 중복 데이터가 너무 많이 발생할 수 있습니다. 전달 만 나타나고 리디렉션은 그렇지 않습니다.
첫 번째 사례 (JavaScript 사용)에 대한 솔루션은 후자의 두 가지에 적합하지 않습니다.
먼저 페이지에 다음 형식으로 JavaScript 코드 추가
var 제출 플래그 = 거짓; 함수 checkSubmit () {if (! submitflag) {submitflag = true; document.forms [0] .submit (); }}(1) 제출 버튼의 유형 속성이 버튼 인 경우 :
onclick =”checksubmit ();”버튼을 설정합니다.
(2) 제출 버튼의 유형 속성이 제출 된 경우 :
버튼의 onclick = "CheckSubmit ();"를 설정하십시오. 그리고 <sumpals "태그에 onsubmit ="returnfalse "를 추가하십시오. 제출 버튼이 자동으로 제출되면 클릭 이벤트가 제출 된 후 OnSubmit이 "returnFalse"로 설정되므로 제출 버튼의 자동 제출이 유효하지 않습니다.
다음 두 가지 상황에서는 세션을 사용하여 문제를 해결할 수 있습니다. 원칙은 정보 추가 페이지를 실행할 때 세션에 정보를 배치 한 다음 페이지에서 처리 할 수 있도록 Servlet에 정보를 제출하는 것입니다. 서블릿은 세션에서 정보를 얻습니다. 세션에 비어 있지 않은 정보가 있으면 정보를 데이터베이스에 삽입 한 다음 세션에서 정보를 삭제하십시오. 다음에 양식이 제출 될 때 세션의 정보가 비어 있으면 저장된 정보 프로세스가 실행되지 않습니다.
그러나 단순히 세션을 사용하는 것은 한계가 있으므로 실제 개발에서는 일반적으로 UUID와 결합 된 세션을 사용하여 반복적 인 양식을 해결하는 데 사용됩니다. 코드는 다음과 같습니다.
uuidtoken 클래스를 정의하십시오
공개 클래스 uuidtoken {private static uuidtoken uuidtoken = new uuidtoken (); private uuidtoken () {} public static uuidtoken getuuidtoken () {return uuidtoken;} public synchronized string getuuidasstr (httpservletrequest) {httervletrequest request); uuidstr = uuid.randomuuid (). tostring (); if (uuidstr! = null) {session.setattribute ( "session.uuid", uuidstr);} uuidstr;}/*** jsp 페이지의 uuid가 동일한지 여부를 결정합니다*/public a synchronized boolean isuuidValidate (httpservletrequest request) {// 기존 세션을 가져옵니다 httpsession session = requestsession (false); if (session == false;} string sessionuuid = (string) session.getAttribute ( "session. htmlluuid = reture.getParameter ( "html.uuid"); if (htmlluuid == null) {return sessionuuid.equals (htmlluuid);}/** * */public synchronized void resetuid (httpservletre request) {httpservletre request). 세션 = request.getSession (false); if (session == null) {return;} session.removeattribute ( "session.uuid");}}JSP 페이지에 숨겨진 도메인을 추가하고 UUID를 사용하여 고유 식별 번호를 생성하고 숨겨진 도메인에 할당 한 다음 고유 식별 번호를 세션 사본에 배치하십시오. 코드는 다음과 같습니다.
<입력 유형 = "hidden"name = "html.uuid"value = '<%= uuidtoken.getuuidtoken (). getuuidasstr (request)%>'>
서블릿에 제출 한 후 JSP 페이지의 숨겨진 도메인의 값을 얻고 숨겨진 도메인의 값을 세션에 배치 한 값과 비교하십시오. 동일하면 데이터를 저장하고 세션에서 UUID를 삭제하십시오. 동일하지 않은 경우 반복 제출이며 처리가 수행되지 않음을 의미합니다.
부울 플래그 = uuidtoken.getuuidtoken (). isuuidvalidate (request); if (flag) {// 데이터베이스에 정보를 저장 // uuidtoken.getuuidtoken (). resetuuid (reteetuuid ();} else {system.out.println ( "form revmission");};요약
위의 내용은 세션 사용에 대한이 기사의 간단한 토론에 관한 모든 것이 형태의 반복 제출을 방지합니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!