Para resolver o problema de envio repetido de formulário em projetos, existem as seguintes situações em projetos comuns em que pode ocorrer envio de formulário repetido, como:
1. Devido ao atraso lento do servidor ou à rede, clique no botão Enviar repetidamente
2. A submissão foi concluída com sucesso, mas a página de sucesso foi atualizada
3. A submissão foi concluída com sucesso. Ao voltar atrás, clique no botão Enviar novamente.
Todas essas situações podem fazer com que muitos dos mesmos dados redundantes sejam gerados nos recursos de banco de dados e banco de dados de resíduos. Somente o encaminhamento aparecerá e o redirecionamento não.
A solução para o primeiro caso (usando JavaScript) não funciona para os dois últimos:
Primeiro, adicione o código JavaScript no formato a seguir à página
var submitflag = false; função checksubMit () {if (! submitflag) {submitflag = true; document.forms [0] .submit (); }}(1) Quando o atributo de tipo do botão Enviar é o botão:
Basta definir o botão onclick = ”checkSubMit ();”.
(2) Quando o atributo de tipo do botão Enviar é enviado:
Defina o botão OnClick = "checkSubMit ();" e adicione onsubMit = "returnfalse" à tag <morm>. Como quando o botão Enviar é enviado automaticamente, depois que o evento de clique é enviado, o OnSubmit está definido como "ReturnFalse", o envio automático do botão Enviar será inválido.
Para as duas situações a seguir, você pode usar a sessão para resolver o problema. O princípio é colocar informações na sessão ao executar a página de adição de informações e enviar as informações ao servlet para processamento na página. O servlet obtém as informações na sessão. Se houver informações na sessão que não estiver vazia, insira as informações no banco de dados e exclua as informações na sessão. As informações na sessão estão vazias na próxima vez que o formulário for enviado, o processo de informação armazenado não será executado.
No entanto, simplesmente o uso da sessão tem suas limitações; portanto, no desenvolvimento real, geralmente é usado para usar a sessão combinada com o UUID para resolver envios repetidos de formulários. O código é o seguinte:
Defina uma classe UuidToken
public classe uuidToken {private estático uuidToken uuidToken = new UuidToken (); private uuidToken () {} public static uuidToken getUuidToken () {return uuidToken;} public syncronized string string string; uuidstr = uuid.randomuuid (). tostring (); if (uuidstr! = null) {session.setAttribute ("session.uuid", uuidstr);} retorna uuidstr;}/*** [** ** Determine o público/sinalizador e o sinalizador e o sinalizador no jspr; isuUuidValidate (httpServletRequest solicitação) {// Obtenha a sessão existente HttpSession session = request.getSession (false); if (session == null) {return false;} string sessionUuid = (string) session.gettribute ("session.uuid"); se (sessionuuid == null) {getSeattribute ("Session.uuid); htmlLuuid = request.getParameter ("html.uuid"); if (htmlLUuid == null) {return false;} retornar sessionUid.equals (htmlLuuUid);}/** * DELETE UUID */public syncronized void ressetuId (hTTerSert * session = request.getSession (false); if (session == null) {return;} session.removeattribute ("session.uuid");}}Adicione um domínio oculto à página JSP, use o UUID para gerar um número de identificação exclusivo, atribuir -o ao domínio oculto e coloque o número de identificação exclusivo em uma cópia da sessão. O código é o seguinte:
<input type = "hidden" name = "html.uuid" value = '<%= uuidToken.getuuidToken (). getuuidasstr (request)%>'>
Depois de enviar ao servlet, obtenha o valor do domínio oculto da página JSP e compare o valor do domínio oculto com o valor colocado na sessão. Se o mesmo, salve os dados e exclua o UUID da sessão. Se não for o mesmo, significa que é um envio repetido e nenhum processamento é realizado.
Bandeira booleana = uuidToken.getuuidToken (). IsuuidValidate (request); if (flag) {// salve informações no banco de dados // delete uuidToken.GeuuuidToken (). RESETUUID (request);} {System.out.println ("Formate.Resumir
O exposto acima é tudo sobre a breve discussão deste artigo sobre o uso da sessão para evitar envios repetidos de formulários. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!