向后台传送数据。
那么可能就会有一些捣乱的用户,或者恶意工具做事器的

他可能多次点击提交按钮。
导致做事器须要解析多次要求

那么就会涌现问题。
增加做事器压力。

jsp页刷新重复插入数据web防止表单多次提交的办法 RESTful API

办理方案1:

通过js ,定义一个全局变量。
默认是false,当用户点击提交按钮。
把全局变量该为true.

当用户点击第二次提交,会如果是true就不再实行提交。

代码如下

<script type=\"大众text/javascript\公众>

var isCommitted = false;//表单是否已经提交标识,默认为false

function dosubmit(){

if(isCommitted==false){

isCommitted = true;//提交表单后,将表单是否已经提交标识设置为true

return true;//返回true让表单正常提交

} else {

layer.msg(\"大众您已经提交过了,信息正在查询请您耐心等待..\公众)

return false;//返回false那么表单将不提交

}

}

</script>

其次须要在表单onsubmit=\"大众return dosubmit()\"大众

用户点击提交之后默认转到该方法下实行代码

以上一种办理方案,只能办理不懂技能的,小白用户 但是不能从根本上办理问题

还有一种办法 便是 在做事器做验证。
这也是最佳的办理方案 (推举利用这种办法)

这种办理方案大略概括便是:

用户点击跳珠表单页面,会默认天生一个token值。
token值可以是uuid+算法天生的唯一值。
办法多种多样都可以

然后把这个token值放入session中,后台可以通过el表达式把通过key拿出token值,存入form表单中的hidden隐蔽表单中

用户每次提交,连同表单数据和这个token值发送到做事器。
做事器去校验这个token值。

首先校验这个token值你要知道有几种情形

第一种:

表单中没有token,代表他重复叫

第二种

当前session中没有token,则用户代表重复提交

第三种

存储在session中的token令牌与表单Token不同,则代表用户重复提交

每种情形都要考虑进去,

直接干代码!

不说废话了

上面几种情形 我会单独 写出一个工具类

/

判断客户端提交上来的令牌和做事器端天生的令牌是否同等

@param args

true:表示重复提交

false:表示没有重复提交

/

public static boolean isRepeatSubmit(HttpServletRequest request) {

String client_token = request.getParameter(\"大众token\"大众);

//第一种情形,如果提交表单没有token则该用户是重复提交表单

if (client_token == null){

return true;

}

//取出来存储在session中的令牌

String server_token = (String) request.getSession().getAttribute(\"大众token\公众);

//2、如果当前用户的Session中不存在Token(令牌),则用户是重复提交了表单

if (server_token == null){

return true;

}

//3、存储在Session中的Token(令牌)与表单提交的Token(令牌)不同,则用户是重复提交了表单

if (!client_token.equals(server_token)){

return true;

}

return false;

}

2 跳转页面对盆token值

//该方法紧张用于跳转JSP页面,并且防止多次提交创建token

@RequestMapping(value = \公众findLogisticsPrice\"大众)

public String findLogistics(HttpServletRequest request, HttpServletResponse response){

String token = TokenUtils.getAccessToken(UUID.randomUUID().toString());

request.getSession().setAttribute(\"大众token\公众, token);

return \"大众modules/logisticsproviders/freightEstimateIndex\"大众;

}

天生token值的代码为:

/

描述:天生Token方法

@return

/

public static String getAccessToken(String uuid){

String key = \公众UZ\"大众;

String timestamp = String.valueOf(System.currentTimeMillis());

return HMACSHA256((uuid+timestamp).getBytes(),key.getBytes());

}

3 在业务层直接处理逻辑

//判断用户是否是重复提交

boolean b = TokenUtils.isRepeatSubmit(request);

if (b==true){

String ze = \"大众请不要重复提交!


\公众;

return ze;

}

当业务层逻辑快实行完时候

//移除session中的token

request.getSession().removeAttribute(\公众token\"大众);