打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
javaWEB解决表单重复提交的问题(原理)
单的重复提交    1> 重复提交的情况:             1> 在表单提交到一个Servlet,而Servlet又通过请求转发的方式响应了一个JSP(HTML)页面,            此时地址栏还保留着Servlet的那个路径,在响应页面点击“刷新”,这就是一个重复提交的情况。             2> 在响应页面没有到达时,重复点击提交按钮。             3> 点击返回,再点击提交。    2> 不是重复提交的情况:点击“返回”,“刷新”原页面,在“提交”    3> 如何避免表单的重复提交:        在表单中做一个标记,提交到Servlet时,检查标记是否存在且是否和预定义的标记一致,若一致,则受理请求,        并销毁标记,若不一致或没有标记,则直接响应提示信息:"重复提交";        解决:把标记放在session中,可以!        1> 在原表单页面,生成一个随机值 token        2> 在原表单页面,把token值放入session 属性中        3> 在元表单页面,把token值放入到隐藏域中。        4> 在目标的Servlet 中:获取session 和隐藏域中的token值        5> 比较两个值是否一致:若一致,受理请求,且把session域中的token属性清除        6> 若不一致,则直接响应提示页面:"重复提交"
客户端
<form onsubmit="return check()">
boolean doSubmit = false;
function check(){
if(!doSubmit ){
doSubmit  = true;
return true;
}
return false;
}
  1. 1.新建两个文件

    index.jsp -- 表单页面

    success.jsp -- 结果提示页面

  2. 2

    2.代码分别如下:

  3. 3

    3.新建TokenServlet,代码如下

  4. 4

    4.运行index.jsp,输入用户名,点击提交

  5. 5

    5.正常跳转结果页面

  6. 6

    6.但当我在这个页面点击刷新的时候,出现如下提示

  7. 7

    7.点击重试,发现又一次调用了servlet,这就是一个重复提交

  8. 8

    8.多刷新几次,注意看URL地址,现在仍然是servlet

  9. 9

    9.以前说重定向可以解决表单重复提交的问题,我们修改Servlet代码如下

  10. 10.再次测试,发现重定向到了success.jsp ,再点击刷新的话也不会出现重复提交了

  11. 11.那问题解决了么?再看,当我点击浏览器中的返回,然后再点击提交,如此反复,仍然在重复调用Servlet,这也是重复提交

  12. 12.现在修改Index.jsp

  13. 13.修改servlet代码

  14. 14.新建token文件,代码如下

  15. 15.在浏览器中测试(注,这里如果再使用Eclipse自带浏览器的话,会出现缓存问题,所以使用正常的浏览器火狐或者IE)

  16. 16.hidden中的token 和session中的token是相同的

  17. 17.当点击浏览器中的后退按钮,再次进行操作,发现不能重复提交

  18. 18.这是因为session中的token已经被移除掉了

  19. 19.而返回后刷新页面,相当于新开一个index.jsp 重新获取token 赋值给session,这时可以正常提交了


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Struts2防止表单重复提交
JSP中getParameter和getAttribute区别(一)
详细技术方案1
框架总结
Struts解决表单重复提交问题
token机制
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服