一. 表单的重复提交
1.重复提交的情况
1)在表单提交到一个Servlet,而Servlet又通过请求转发的方式相应一个JSP(HTML)页面,此时地址栏还保留着Servlet的那个路径,在相应页面点击“刷新”
2)相应页面没有达到时重复点击提交按钮
3)点击”返回”再点击“提交”
2.不是重复提交的情况
1)点击返回,刷新原表单,再提交
3.如何避免表单的重复提交:在表单中做一个标记,提交到Servlet时,检查标记是否存在且是否和预定义标记一致,若一致则受理请求并销毁标记。
若不一致或没有标记,则直接相应提示信息:重复提交。
2.基本原理:
>在原表单页面,生成一个随机token
>在原表单页面,把token值放入session属性中
>在原表单页面,把token值放入到隐藏域中
>在目标的Servlet中:获取session和隐藏域中的token值
>比较两个值是否一致:若一致,受理请求且把session域中的token属性清除。若不一致,直接相应提示页面:”重复提交“
二.验证码重复提交
1.基本原理:和表单重复原理一样
>在原表单页面,生成一个验证码图片,生成图片时,需要把该图片的字符串放入到session中
>在原表单页面,定义一个文本域,用于输入验证码
>在目标的Servlet中:获取session和表单域中的验证码值
>比较两个值是否一致:若一致,受理请求且把session域中的t验证码属性清除。若不一致,直接通过重定向的方式返回原页面,并提示“验证码错误”