Um das Problem der Einreichung der wiederholten Form in Projekten zu lösen, gibt es die folgenden Situationen in normalen Projekten, in denen eine Einreichung mit wiederholten Formularen auftreten kann, wie z. B.:
1. Klicken Sie aufgrund der langsamen Server- oder Netzwerkverzögerung wiederholt auf die Schaltfläche Senden
2. Die Einreichung wurde erfolgreich abgeschlossen, aber die erfolgreiche Seite wurde aktualisiert
3. Die Einreichung wurde erfolgreich abgeschlossen. Wenn Sie zurückfallen, klicken Sie erneut auf die Schaltfläche Senden.
Alle diese Situationen können zu viel von denselben redundanten Daten führen, die in den Datenbank- und Abfalldatenbankressourcen generiert werden können. Es wird nur eine Weiterleitung erscheint, und das Umleiten wird nicht.
Die Lösung für den ersten Fall (mit JavaScript) funktioniert für die beiden letzteren nicht:
Fügen Sie zuerst den JavaScript -Code im folgenden Format zur Seite hinzu
var subleflag = false; Function Checksubmit () {if (! subleflag) {subleFlag = true; document.forms [0] .submit (); }}(1) Wenn das Typ -Attribut der Schaltfläche "Senden" ist:
Setzen Sie einfach die Schaltfläche onclick = ”ChecksSubmit ();“.
(2) Wenn das Typ -Attribut der Schaltfläche Senden eingereicht wird:
Stellen Sie die Schaltfläche auf. und fügen Sie dem <Formular> -Tag onSubmit = "returnFalse" hinzu. Denn wenn die Schaltfläche Senden automatisch eingereicht wird, ist nach dem Übertrag des Klickereignisses der ONSUBMIT auf "returnFalse" eingestellt, die automatische Einreichung der Sendel -Schaltfläche ungültig.
In den folgenden zwei Situationen können Sie die Sitzung verwenden, um das Problem zu lösen. Das Prinzip besteht darin, Informationen in die Sitzung zu platzieren, wenn die Seite "Informationen hinzugefügt" und dann die Informationen zur Verarbeitung auf der Seite an den Servlet senden. Das Servlet erhält die Informationen in der Sitzung. Wenn Informationen in der Sitzung nicht leer sind, fügen Sie die Informationen in die Datenbank ein und löschen Sie die Informationen in der Sitzung. Die Informationen in der Sitzung sind leer, wenn das nächste Mal das Formular eingereicht wird und der gespeicherte Informationsprozess nicht ausgeführt wird.
Die einfache Verwendung der Sitzung hat jedoch seine Einschränkungen. In der tatsächlichen Entwicklung wird es im Allgemeinen zur Verwendung von Sitzungen in Kombination mit UUID verwendet, um wiederholte Einreichungen von Formularen zu lösen. Der Code ist wie folgt:
Definieren Sie eine uUidtoken -Klasse
public class UuidToken {private static UuidToken UuidToken=new UuidToken();private UuidToken(){}public static UuidToken getUuidToken() {return UuidToken;}public synchronized String getUUIDAsStr(HttpServletRequest request){HttpSession session=request.getSession();String uUidstr = uUid.randomuuid (). toString (); if (uUidstr! IsUuIdvalidat (httpServletRequest -Anforderung) {// Erhalten Sie die vorhandene Sitzung httpSession Session htmlluuid=request.getParameter("html.uuid");if(htmlluuid==null){return false;}return sessionuuid.equals(htmlluuid);}/** * Delete uuid */public synchronized void resetUUID(HttpServletRequest request) {HttpSession Session = Request.GetSession (false); if (session == null) {return;} session.removeAttribute ("Session.UUID");}}Fügen Sie der JSP -Seite eine versteckte Domäne hinzu, generieren Sie UUID, um eine eindeutige Identifikationsnummer zu generieren, der versteckten Domäne zuzuordnen und die eindeutige Identifikationsnummer in eine Kopie der Sitzung einzulegen. Der Code ist wie folgt:
<Eingabe type = "Hidden" name = "html.uuid" value = '<%= uUidtoken.getuuidtoken ().
Nehmen Sie nach dem Senden an das Servlet den Wert der verborgenen Domäne der JSP -Seite und vergleichen Sie den Wert der versteckten Domäne mit dem in der Sitzung platzierten Wert. Wenn dieselbe, speichern Sie die Daten und löschen Sie die UUID aus der Sitzung. Wenn es nicht dasselbe ist, bedeutet dies, dass es sich um eine wiederholte Einreichung handelt und keine Verarbeitung durchgeführt wird.
Boolean flag = uUidtoken.getuuidtoken (). IsUuIdvalidat (request); if (flag) {// Informationen in der Datenbank speichern // uUidtoken.getuUidToken (). ResetuUid (Anfrage);} else {system.outln ("Formulare Submission")};Zusammenfassen
In der oben genannten Art dreht sich alles um die kurze Diskussion dieses Artikels über die Verwendung der Sitzung, um wiederholte Einreichungen von Formularen zu verhindern. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!