web应用中怎么样限制用户只能提交一次表单请求

众所周知,浏览器客户端重复恶意提交可以导致服务器端性能急剧下降,
所以在浏览器端限制客户端的提交就显得有必要了
struts2的解决方法:

必须使用struts标签才能够做到表单的重复提交验证
<font size="10">login</font>
<s:form method="post" action="token/userLoginAction!login">
<s:textfield name="username" value="zhangsan"></s:textfield>
<s:textfield name="password" value="pwd"></s:textfield>
<s:token></s:token>
<s:submit value="login"></s:submit>
</s:form>


<package name="preventDoublePost" extends="struts-default" namespace="/token">
<action name="userLoginAction" class="com.zyb.web.user.UserLoginAction">
<interceptor-ref name="defaultStack"/><!-- 需要注意拦截器栈的配置顺序-->
<interceptor-ref name="token"/><!-- 这就是用来防止表单重复提交的拦截器-->
<result name="invalid.token">../doublePost.jsp</result><!-- 需要注意的是名字必须为invalid.token-->
<result name="success">../fileupload_success.jsp</result>
</action>
</package>


struts2的token标签重复提交还是在服务器端进行判断的

也可以通过客户端的js来进行判断:

<%@ page language="java" contentType="text/html; charset=Gb2312"%>
<html>
<head>
<title>客户端限制重复提交</title>
<script language="javascript">
<!--定义重复提交标志变量 -->
var repeatSubmitFlag = false;
<!-- 重复提交检查函数 -->
function checkSubmit()
{
if(repeatSubmitFlag) <!-- 如果标志为true,则说明页面已经提交 -->
{
window.alert('禁止重复提交!');
return false;
}
else
{
repeatSubmitFlag = true;
return true;
}
}
</script>
</head>
<body>
<center>
<form name="form_client" action="clientReceive.jsp"
onSubmit="return checkSubmit();">
用户名
<input name="username" type="text" size="12">
<br>
密  码
<input name="pwd" type="password" size="12">
<br>
      
<input type="submit" name="Submit" value="提交">
</form>
</center>
</body>
</html>


也可以这样写:

<%@ page language="java" contentType="text/html; charset=Gb2312"%>
<html>
<head>
<title>客户端限制重复提交</title>
</head>
<body>
<center>
<form name="form_client" action="clientReceive.jsp"
onSubmit="window.document.form_client.submitok.disabled=true; return true;">
用户名
<input name="username" type="text" size="12">
<br>
密  码
<input name="pwd" type="password" size="12">
<br>
      
<input type="submit" name="submitok" value="提交">
</form>
</center>
</body>
</html>


如果要在服务器端用session进行判断可以这样:


<%@ page contentType="text/html; charset=gb2312"%>
<html>
<head>
<title>用户登录页面</title>
</head>
<%
//设置标志变量SubmitFlag值original
session.putValue("SubmitFlag", "original");
%>
<body>
<center>
<form name="form_client" action="sessionReceive.jsp">
用户名
<input name="username" type="text" size="12">
<br>
密  码
<input name="pwd" type="password" size="12">
<br>
      
<input type="submit" name="Submit" value="提交">
</form>
</center>
</body>
</html>

后端判定:


<%@ page contentType="text/html; charset=gb2312"%>
<html>
<head>
<title>服务器端程序</title>
</head>
<body>
<%
String PageFlag;
PageFlag = (String) session.getValue("SubmitFlag");
if (PageFlag == "Over") {
out.println("不能重复提交页面!");
} else {
//设置标志变量SubmitFlag值为Over,表示已经提交
session.putValue("SubmitFlag", "Over");
//进入数据接收并处理程序代码
out.println("正在处理...请等待!!!");
//在此处添加数据处理代码
}
%>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值