日期:2014-05-17  浏览次数:20642 次

普通HTML表单的防止重复提交
流程 如下: servelet(生成令牌*随机数*保存到session) ===> 编辑页面(代有HTML的普通FORM表单,表单里有一个HIDDEN )===提交数据 ===>servelet(HIDDEN值跟SESSION里的值比较* 重新生成令牌)

servelet:
           /**
  * 生成一个10位的随机数,用字符串表示
  * @return 返回生成的1000位的随机数
  */
public String createAutoNum() {
  char[] num = new char[10];// 生成一个1000位的char数组
  Random ran = new Random();// 随机数类
  int temp;// 存放当前随机数
  char cur;// 存放当前字符
  for (int i = 0; i < num.length; i++) {
   temp = ran.nextInt(10);// 生成一个0-9的随机数
   cur = (char) ('0' + temp);// 转化成char型的数字
   num[i] = cur;// 放到数组的当前位
  }
  return new String(num);// 返回这个随机数(用字符串形式)
}


HttpSession session = httpServletRequest.getSession();
session.setAttribute("qdtoken", createAutoNum());//设置命令牌


//编辑页面
String qdtoken = (String)request.getSession().getAttribute("qdtoken");
<input type="hidden" name="qdtoken" value="<%=qdtoken %>" />

servelet :

HttpSession session = request.getSession();
if(qdtoken.equals(session.getAttribute("qdtoken"))){//检查是否重复提交
    session.setAttribute("qdtoken", createAutoNum());
}else{

session.setAttribute("qdtoken", createAutoNum());//提交令牌 防止重复提交
}