如题。
1、点击按钮提交
2、F5或刷新页面
3、Ctrl+N后提交
等等情况
1、点击按钮提交
2、F5或刷新页面
3、Ctrl+N后提交
等等情况
解决方案 »
- ssh 更新数据时获取不到主键
- 文件上传后大小发生变化,而且打不开
- Web 应用开发工具,基于Eclipse的Java工具,可视化定义Jsp页面,可视化定义工作流
- 要实习了投简历发现大多要求orical和linnux,如何快速由不会到可以应付面试的水平
- jsp异常处理请各位大狭帮帮忙~~~~~~~~急
- 在线求助:关于字符传比较的问题!!顶者有分!!
- 年底了,又要换公司,带着些许失落,些许迷茫!
- 在linux上怎么起动eclipse
- 大家能否提供一个比较完整数据库操作的JavaBean
- JSP中如何获取屏幕分辨率?
- Java Web编程宝典十年典藏版 第7章
- 使用javascript弹出消息框的问题
Sruts的防止重复提交就不用拖上来了
f5或刷新页面的,使用处理成功后页面转向(这个不是很好,遇到处理时间长时),使用js在内嵌的<iframe>中处理(iframe中也是可以掉servlet的),再结合对按钮的是否可用的处理,
ctrl+n,的,在js中设置页面全局变量。
还可用弹出div来进行处理,在结合上面可以用到的技巧继续补充
2, strtus框架Token控制:super.saveToken(request);
<script type="text/javascript">
window.onload=function(){
document.getElementById("form1").action="<%=request.getContextPath()%>/servlet/CheckAdminLoginServlet";
};
function OnCompleted(errnum,errmessage){
switch(errnum){
case 0:
break;
case 101:
alert('Fill blank');
return;
case 201:
alert('Login failed');
return;
}
window.location='<%=request.getContextPath()%>/admin/admin.jsp';
}
function check(){
with(document.getElementById('form1')){
if(name.value.length<=0){
alert('fill name');
return false;
}
if(password.value.length<=0){
alert('fill password');
return false;
}
return true;
}
}
</script>
<form id="form1" target="CheckLogin" name="form1" method="post" action="" onsubmit="return check();">
...
<script type="text/javascript">
document.write( '<iframe name="CheckLogin" style="display: none" src="<%=request.getContextPath()%>/ui/wait.htm"></iframe>' ) ;
</script>
</form>
注意代码中间的
和是为了突出,才加的修饰。
部分代码,根据情况需要酌情增删。
包装后的方式:struts中的token,其实也是上一种方式,可以看看源代码就知道了。
<!--
top.location = "/oa/index.jsp";
location.replace = "/oa/index.jsp";
//-->
</script>
点按钮的,使按钮变成不可用,
f5或刷新页面的,使用处理成功后页面转向(这个不是很好,遇到处理时间长时),使用js在内嵌的 <iframe>中处理(iframe中也是可以掉servlet的),再结合对按钮的是否可用的处理,
ctrl+n,的,在js中设置页面全局变量。
还可用弹出div来进行处理,在结合上面可以用到的技巧 根据session id
strtus框架Token控制:
验证码 时间戳
alert提示大法还有更好更简单更有效的方法吗?
有recrdrit()跳转一下,不关他怎么刷新都没用了这个方法简单实在
google的邮箱登陆系统 就是这样的你可以试下注册后账号,在刷新是没用的
1,采用struts中token方法实现.
2,解发写入数据库操作的action之后,不再用forward的方法,转发页面请求,直接采用sendRedirect方法,将URL地址中触发写入数据库操作的action转到一个新的页面,再刷新页面,不会重复提交数据.
3,解发写入数据库操作的action之后,调用formbean中的resetform方法,将form中的数据库清空,当然提交form中数据库有一定限制时会起作用,允许向数据库写入null时,就不起作用了.
4,页面脚本实现,当提交过一次表单后,将提交按钮变为不可用,就不会再触发写入数据库的操作.
session标签控制瞬间多次提交
session也搞过
js没试过
不刷新页面,用ajax后台提交,按后退、F5按了也白按。
按下提交按钮后disable掉,ajax处理后回调enable按钮的函数。如果是恶意的,session 都是防不了的。需要防DOS的手段了。
就个URL都可以进入后台
我认为凡是用js来现实的,都是不安全的。
2,前台用js,比如点击按钮不可用,这个东西F5还是有用的
2.用javascript脚本控制
用 response.sendRedirect("....."); return null;我的愚见...
if( !isTokenValid(request,true) ){
System.out.println("重复提交!");
saveToken( request );
request.setAttribute("","");
return mapping.findForward("");
}saveToken( request );在页面上控制:
使用js将提交按钮屏蔽
function hidbutton()
{
if(window.document.readyState!=null && window.document.readyState!='complete')
{
//判断页面是否执行完毕
//alert("数据加载中,请您稍等!");
//document.getElementById("btnRechargeList").display=false;
//查询按钮隐藏
document.getElementById("btnRechargeList").style.display="none";
//显示提示
document.getElementById("spanMsg").innerHTML="数据加载中,请您稍等!";
return false;
}
else
{
//alert("1");
//提示消息隐藏
document.getElementById("spanMsg").visible=false;
return true;
}
}按钮应用
<asp:Button ID="btnRechargeList" runat="server" Text="查看消费清单" OnClientClick="return btnCheck()" OnClick="btnRechargeList_Click" /><span id="spanMsg" style="color: red"></span></td>
function hidbutton()
{
if(window.document.readyState!=null && window.document.readyState!='complete')
{
//判断页面是否执行完毕
//alert("数据加载中,请您稍等!");
//document.getElementById("btnRechargeList").display=false;
//查询按钮隐藏
document.getElementById("btnRechargeList").style.display="none";
//显示提示
document.getElementById("spanMsg").innerHTML="数据加载中,请您稍等!";
return false;
}
else
{
//alert("1");
//提示消息隐藏
document.getElementById("spanMsg").visible=false;
return true;
}
} 按钮应用
<asp:Button ID="btnRechargeList" runat="server" Text="查看消费清单" OnClientClick="hidbutton() OnClick="btnRechargeList_Click" /> <span id="spanMsg" style="color: red"> </span> </td>