j2ee 开发中防止表单重复提交

今天对j2ee web开发中怎样防止对表单的重复提交作一下总结:

第一:可以在客户端利用Javascript对表单重复提交作验证,主要实现手段是在这个表单触发表单提交事件的时候调用一个Javascript编写的函数,这个函数:

<script>

var isCommitted = false;

function checkPost()

{

if(!isCommitted)

{

isCommitted = true;

return true;

}

else

{

alert("不能重复提交表单");

return false;

}

}

</script>

<form action="servlet/RepeateFormServlet" method="POST" οnsubmit="return checkPost()">...


第二种:利用验证码
由于每次表单的提交都需要一个验证码这个验证码在服务器端是唯一的每次表单提交的验证码是不同的可以根据每次提交上来的验证码与服务器端的中的session中的验证码进行匹配

第三种:利用一个时间令牌(可以使任意的令牌只要是唯一的就可以)

产生这个唯一令牌

如:<%
Date nowDate = new Date();
String nowDateString = new Long(nowDate.getTime()).toString();
session.setAttribute("tokenTime",nowDateString);
%>

通过一个表单隐藏的字段传递这个令牌

<input type="hidden" name="tokenTime" value="<%=nowDateString%>">

接下来在服务器端中的session中获取这个时间令牌然后与这个表单的隐藏字段进行比较
相同则提交表单并且把这个session中的tokenTime删除
session.setAttribute("tokenTime",nowDateString);
反之....


第四种:基于Struct框架的解决方案

在Struct框架中提供一个Token机制来解决表单的重复提交

使用这个Token应注意:

这个JSP必须是通过一个Action进行转发并且在这个Action中调用saveToke(request);
这个方法向导向的JSP中保持一个唯一的Token

然后在一个处理表单的Action中调用isTokenVaild(request,true)方法来验证这个表单是否被重复提交

实现原理:当调用saveToken(request)时候服务器向JSP中输出一个唯一的Token服务器端也保存相同的一份当提交这个表单的时候调用isTokenValid(request,ture)进行校验后服务器又会生出一个新的Token发送给表单JSP中服务器端的Token不发送改变,当客户端再次提交这个表单的时候调用isTokenValid(request,ture)方法进行校验此时这个Token不一致则不会重复提交表单啦......


多指教......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青年IT男

您的打赏就是对我的肯定!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值