Para resolver el problema de la presentación de formulario repetido en proyectos, existen las siguientes situaciones en proyectos ordinarios donde puede ocurrir la presentación de formulario repetido, como:
1. Debido al servidor lento o al retraso de la red, haga clic en el botón Enviar repetidamente
2. La presentación se ha completado con éxito, pero la página exitosa se ha actualizado
3. La presentación se ha completado con éxito. Al retroceder, haga clic en el botón Enviar nuevamente.
Todas estas situaciones pueden causar demasiado de los mismos datos redundantes que se generan en la base de datos y los recursos de la base de datos de residuos. Solo aparecerá el reenvío, y la redireccionamiento no lo hará.
La solución para el primer caso (usando JavaScript) no funciona para los dos últimos:
Primero agregue el código JavaScript en el siguiente formato a la página
var SubtFlag = false; function checkSubMit () {if (! SubtFlag) {SubtFlag = True; document.forms [0] .submit (); }}(1) Cuando el atributo de tipo del botón Enviar es el botón:
Simplemente establezca el botón onClick = ”checkSubMit ();”.
(2) Cuando se envía el atributo de tipo del botón Enviar:
Establezca el botón OnClick = "checksubMit ();" y agregue onsubmit = "returnfalse" a la etiqueta <Form>. Debido a que cuando se envía automáticamente el botón de envío, después de enviar el evento de clic, el ONSubmit está configurado para "returnfalse", la presentación automática del botón de envío no será válida.
Para las siguientes dos situaciones, puede usar la sesión para resolver el problema. El principio es colocar información en la sesión al ejecutar la página de agregar información y luego enviar la información al servlet para su procesamiento en la página. El servlet obtiene la información en la sesión. Si hay información en la sesión que no está vacía, inserte la información en la base de datos y luego elimine la información en la sesión. La información en la sesión está vacía la próxima vez que se envíe el formulario, entonces el proceso de información almacenada no se ejecutará.
Sin embargo, simplemente el uso de la sesión tiene sus limitaciones, por lo que en el desarrollo real, generalmente se usa para usar la sesión combinada con UUID para resolver presentaciones repetidas de formularios. El código es el siguiente:
Defina una clase UuidToken
clase pública uuidToken {private static uuidtoken uuidToken = new uuidToken (); private uuidToken () {} public static static uuidtoken getuuidToken () {return uuidToken;} public sincronizado stronized getuiDasstr (htttpServietRequest Solicitud) {httpsession session = request. uuidstr = uuid.randomuuid (). toString (); if (uuidStr! = null) {session.setTtribute ("session.uuid", uuidstr);} return uuidstr;}/*** Determine si el uuid guardado en la sesión y el uuid en la página JSP están iguales*/público synchronized boolean isuuidValidate (httpservletRequest solicitud) {// Obtenga la sesión existente httpsession session = request.getSession (false); if (session == null) {return false;} string sessionUid = (string) session.getAttribute ("session.uuid"); if (sessionUid == null) {return false;} string string (" htmllUUUid = request.getParameter ("html.UUid"); if (htmllUUid == null) {return false;} returnsuuid.equals (htmllluuid);}/** * deletero */public sincronizado sincronizado session = request.getSession (false); if (session == null) {return;} session.removeAttribute ("session.uuid");}}Agregue un dominio oculto a la página JSP, use UUID para generar un número de identificación único, asignarlo al dominio oculto y colocar el número de identificación único en una copia de la sesión. El código es el siguiente:
<input type = "Hidden" name = "html.uuid" valor = '<%= uuidToken.getuuidToken (). getuuidasStr (request)%>'>>
Después de enviar al servlet, obtenga el valor del dominio oculto de la página JSP y compare el valor del dominio oculto con el valor colocado en la sesión. Si es lo mismo, guarde los datos y elimine el UUID de la sesión. Si no es lo mismo, significa que es una sumisión repetida y no se realiza ningún procesamiento.
Boolean Flag = uuidtoken.getuuidToken (). IsUuidValidate (request); if (flag) {// Guardar información en la base de datos // Eliminar uuidtoken.getuuidtoken (). Resetuuid (request);} else {System.out.println ("Sumisión repetida");}Resumir
Lo anterior se trata de la breve discusión de este artículo sobre el uso de la sesión para evitar presentaciones repetidas de formularios. Espero que sea útil para todos. Los amigos interesados pueden continuar referiéndose a otros temas relacionados en este sitio. Si hay alguna deficiencia, deje un mensaje para señalarlo. ¡Gracias amigos por su apoyo para este sitio!