第一种处理方法(非拦截器):

眼下这样的方法不建议,由于JSP规范不建议写JAVA代码。这样的能够方便另外一种处理方法的理解,另外一种方法引入拦截器的思想,原理基本一样,模仿Struts的Token机制。

1、在须要防止反复的jsp中添�以下的java代码,

    <%@page import="java.util.Random"%>
<%@page import="java.util.Set"%>
<%@page import="java.util.HashSet"%>
<%
//生成一个Token,算法能够自己定,不随便反复就能够了
Random ran = new Random();
String formhash = String.valueOf(ran.nextInt());
//读取当前session里面的hashCode集合,此处使用了Set,方便推断。
Set<String> token= (Set<String>) session.getAttribute("token");
if (token== null) {
token = new HashSet<String>();
}
// 检測反复问题
while (token.contains(formhash)) {
formhash = String.valueOf(ran.nextInt());
}
// 保存到session里面
token.add(formhash);
// 保存
session.setAttribute("token", token);
%>

2、
  from表单中添�隐藏域

<input type="hidden" name="formhash" id="formhash" value="<%=formhash%>" />

3、后台代码 推断是否反复提交

        Map<String,String> map = new HashMap<String,String>();
// 拿到表单的formhash
String formhash = request.getParameter("formhash");
// 拿到session里面的集合
Set<String> token= (Set<String>) request.getSession().getAttribute("token");
// 假设没有,则是反复提交,或者非法提交
if (token== null || !token.contains(formhash)) {
map.put("flag", "false");
map.put("message", "已经提交成功,请勿反复提交!");
return map;
} // 最后,假设操作成功,从session里面把这个formhash 删掉!
token.remove(formhash);
request.getSession().setAttribute("token", token);

假设反复提交了,直接return错误信息给页面就可以。

另外一种处理方法(拦截器):

假设用过Struts2的,能够參考Struts2的Token相关机制就可以。以下的实现是SpringMVC/SPring/Mybatis项目中实现的方法。(代码稍后整理贴出)

Servlet、SPringMVC、Struts等防止表单反复提交的多种处理方法的更多相关文章

  1. Struts2复习(四)防止表单反复提交

    1.採取请求转发的方式完毕表单内容的加入会造成内容的反复插入. 2.採取重定向的方式实现数据的加入不会导致数据的反复插入. 3.防止表单反复提交的两种方式 1)  通过重定向  2)  通过Sessi ...

  2. 使用Struts 2防止表单重复提交

    用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次.因此,重复提 ...

  3. [转]使用Struts 2防止表单重复提交

    转自 用户重复提交表单在某些场合将会造成非常严重的后果.例如,在使用信用卡进行在线支付的时候,如果服务器的响应速度太慢,用户有可能会多次点击提交按钮,而这可能导致那张信用卡上的金额被消费了多次.因此, ...

  4. java防止表单重复提交的几种方法

    转载大神 1. 使用session同步和token机制来防止并发重复提交 https://blog.csdn.net/hejingyuan6/article/details/50487777 2. S ...

  5. 161116、springmvc自己实现防止表单重复提交(基于注解)

    原理:在去某个页面直接生成一个随机数(这里使用的是UUID)并放入session中,用户提交表单时将这个随机数传入服务端与session中的值进行比较,如果不不存在或不相等,则认为是重复提交:如果相等 ...

  6. [PHP]防止表单重复提交的几种方法

    --------------------------------------------------------------------------------------------------- ...

  7. js防止表单重复提交的两种方法

    第一种:用flag标识,下面的代码设置checkSubmitFlg标志: 复制代码代码如下: <script language=""javascript"" ...

  8. Jquery构建Form表单Post提交数据的简单方法

    $.extend({ PostSubmitForm: function (url, args) { var body = $(document.body), form = $("<fo ...

  9. JavaWeb使用Session防止表单重复提交

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 1.什么是表单 ...

随机推荐

  1. ORA-01045: user XXZY lacks CREATE SESSION privilege; logon denied

    在创建用户时,一般我们都分配connect.dba.resource 角色,但是,为什么登陆时还报错呢 原因:用户角色没有激动 解决:ALTER USER XXXX DEFAULT ROLE &quo ...

  2. poj 3228 Gold Transportation 二分+网络流

    题目链接 给出n个城市, 每个城市有一个仓库, 仓库有容量限制, 同时每个城市也有一些货物, 货物必须放到仓库中. 城市之间有路相连, 每条路有长度. 因为有些城市的货物量大于仓库的容量, 所以要运到 ...

  3. Linux常用的系统监控shell脚本

    http://www.linuxqd.com下面是我常用的几个Linux系统监控的脚本,大家可以根据自己的情况在进行修改,希望能给大家一点帮助.1.查看主机网卡流量 #!/bin/bash #netw ...

  4. Azure 网站上的 Java

     编辑人员注释:本文章由Windows Azure 网站团队的项目经理Chris Compy 撰写. Microsoft 已推出针对 Azure 网站上基于 Java 的网站的支持.此功能旨在通过 ...

  5. BZOJ 4503 两个串(FFT)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4503 [题目大意] 给出S串和T串,计算T在S中出现次数,T中有通配符'?'. [题解 ...

  6. JQuery DOM HighLighter (it's a basic "Inspect element" simple implementation to mimic what webkit inspector and firebug do)

    JQuery DOM HighLighter (it's a basic "Inspect element" simple implementation to mimic what ...

  7. java开发工具比较(16个工具修订版)

    1.JDK (Java Development Kit)Java开发工具集 SUN的Java不仅提了一个丰富的语言和运行环境,而且还提了一个免费的Java开发工具集(JDK).开发人员和最终用户可以利 ...

  8. c++程序内存泄露检測工具

    功能: 用于检測c++程序的内存泄露. 原理: 事实上非常easy,就是通过函数的重载机制,捕获应用程序的new, new[] , delete , delete[], malloc,calloc,f ...

  9. 非线性规划问题的matlab求解

    函数:[x, fval] = fmincon(FUN, X0, A, B, Aeq, Beq, LB, UB, NONLCON) 返回的x:是一个向量——在取得目标函数最小时各个xi的取值: 返回的f ...

  10. Libcurl安装及编译

    1.安装curl wget http://curl.haxx.se/download/curl-7.26.0.tar.gz tar -zxvf curl-7.26.0.tar.gz  cd curl- ...