防止表单重复提交.doc_第1页
防止表单重复提交.doc_第2页
防止表单重复提交.doc_第3页
防止表单重复提交.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

服务器端写程序防重复提交实现原理:当用户提交的时候,系统首先需要生成一个随机号,在服务器端进行保存并在jsp表单中绑定这个生成的随机号,当jsp表单提交时服务器端接收用户提交的这个随机号然后与服务器端保存的随机号进行对比,如果随即号相同的话,执行提交操作,并把服务器端保存的随机号销毁。如果不同的话提示用户重复提交。示例:生成随机数view plain1. packagecn.itcast.form; 2. 3. importjava.io.IOException; 4. importjava.security.MessageDigest; 5. importjava.security.NoSuchAlgorithmException; 6. importjava.util.Random; 7. importjava.util.UUID; 8. 9. importjavax.servlet.ServletException; 10. importjavax.servlet.http.HttpServlet; 11. importjavax.servlet.http.HttpServletRequest; 12. importjavax.servlet.http.HttpServletResponse; 13. 14. importsun.misc.BASE64Encoder; 15. 16. publicclassFormServletextendsHttpServlet 17. 18. publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) 19. throwsServletException,IOException 20. 21. Stringtoken=TokenProcessor.getInstance().getToken(); 22. request.getSession().setAttribute(token,token); 23. request.getRequestDispatcher(/form.jsp).forward(request,response); 24. 25. 26. publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse) 27. throwsServletException,IOException 28. 29. doGet(request,response); 30. 31. 32. 33. /令牌(随机数生成器) 34. classTokenProcessor 35. 36. /* 37. *1.把构造方法私有 38. *2.自己创建一个对象 39. *3.定义一个方法,让别人获取这个对象 40. * 41. */ 42. 43. privateTokenProcessor() 44. privatestaticfinalTokenProcessorinstance=newTokenProcessor(); 45. publicstaticTokenProcessorgetInstance() 46. returninstance; 47. 48. 49. publicStringgetToken() 50. 51. Stringtoken=System.currentTimeMillis()+newRandom().nextInt(1000000)+; 52. 53. /md5数据指纹消息摘要 54. try 55. MessageDigestdigest=MessageDigest.getInstance(md5); 56. bytemd5=digest.digest(token.getBytes();/任意的16个字节3434 57. 58. /Base64编码 59. /BASE64Encoderencoder=newBASE64Encoder(); 60. /returnencoder.encode(md5); 61. 62. returntoHex(md5); 63. catch(NoSuchAlgorithmExceptione) 64. thrownewRuntimeException(e); 65. 66. /returnUUID.randomUUID().toString(); 67. 68. 69. publicStringtoHex(byteb) 70. StringBuffersb=newStringBuffer(); 71. 72. for(inti=0;i4&15,16); 75. 76. 77. returnsb.toString(); 78. 79. 服务器端验证:view plain1. packagecn.itcast.form; 2. 3. importjava.io.IOException; 4. importjavax.servlet.ServletException; 5. importjavax.servlet.http.HttpServlet; 6. importjavax.servlet.http.HttpServletRequest; 7. importjavax.servlet.http.HttpServletResponse; 8. 9. publicclassRegisterServletextendsHttpServlet 10. 11. publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) 12. throwsServletException,IOException 13. /防表单重复提交 14. booleanb=isValid(request); 15. if(!b) 16. System.out.println(表单是重复提交!); 17. return; 18. 19. request.getSession().removeAttribute(token); 20. 21. Stringusername=request.getParameter(username); 22. 23. try 24. Thread.sleep(1000*5); 25. catch(InterruptedExceptione) 26. /TODOAuto-generatedcatchblock 27. e.printStackTrace(); 28. 29. System.out.println(向数据库注册用户); 30. System.out.println(注册成功!); 31. 32. /校验客户机带过来随即号否有效 33. privatebooleanisValid(HttpServletRequestrequest) 34. 35. Stringc_token=request.getParameter(token); 36. if(c_token=null|c_token.equals() 37. returnfalse; 38. 39. 40. Strings_token=(String)request.getSession().getAttribute(token); 41. if(s_token=null) 42. returnfalse; 43. 44. 45. if(!c_token.equals(s_token) 46. returnfalse; 47. 48. 49. return

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论