众所周知,浏览器客户端重复恶意提交可以导致服务器端性能急剧下降,
所以在浏览器端限制客户端的提交就显得有必要了
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>
分享到:
相关推荐
在Java开发中,异步提交表单请求是一种常见的前端与后端交互方式,它通过Ajax技术实现,使得用户无需等待整个页面刷新即可完成数据的提交和获取,提升了用户体验。Ajax,全称Asynchronous JavaScript and XML(异步...
(2) 用户提交了页面,服务器端首先判断请求参数中的令牌值和session中的令牌值是否相等,如果相等,则认为这是第一次提交,否则,为重复提交。 这种方法可以有效地避免表单的重复提交。但是,它也存在一些缺陷,...
在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Windows桌面应用、Web应用以及游戏等领域。本篇文章将深入探讨如何在C#中通过POST方式提交Form表单,包括其原理、步骤和实际代码示例。 一、POST提交表单的基本...
Layui是一种基于jQuery的前端UI框架,它提供了一套丰富的界面元素和组件,广泛用于构建快速响应的Web界面。在使用Layui设计表单时,经常会遇到表单提交后页面刷新导致的重复提交问题。为了解决这个问题,开发者需要...
在本文中,我们将深入探讨与"台和web简单demo 3,表单提交 form get"相关的Web开发技术,特别是关于HTML表单、HTTP GET请求以及Java在Web应用程序中的作用。让我们逐一了解这些概念。 首先,表单(Form)是HTML语言...
在Web开发中,用户表单重复提交是一个常见的问题,它可能导致数据冗余或者数据库状态的不一致。本示例提供了一种解决方案,包括在前端JavaScript和后端进行处理,以防止用户因网络延迟或误操作导致的多次提交。 ...
在Web开发领域,创建一个应用应聘表单是常见的任务,尤其在招聘流程自动化的过程中。"应用Web应聘表单"是一个用于收集求职者信息的在线平台,它具备信息验证功能、日期选择器以及二级省市联动菜单,以确保提交的数据...
在现代Web应用开发中,防止表单重复提交是一项重要的任务,因为这可能导致数据不一致性和服务器资源浪费。本文将深入探讨如何使用Spring Boot 2.1、Redis和拦截器来实现这一功能。以下是对这个主题的详细解释: ...
### C#以POST方式模拟提交表单 - 关键知识点解析 ...综上所述,通过C#实现POST方式模拟提交表单不仅可以提高Web应用程序的灵活性,还能在安全性方面提供更多保障。开发者应熟练掌握这些技术,并结合实际情况灵活运用。
通过以上步骤,我们可以利用Struts2的Token机制有效地限制表单的多次提交,提高Web应用的安全性和稳定性。在实际项目中,还可以根据具体需求进行调整,比如设置Token的有效时间、自定义Token生成策略等。
当用户提交表单时,服务器会生成一个唯一的Token,并将其存储在一个临时的会话属性中,同时将其返回给客户端(通常是隐藏在表单中)。客户端再次提交表单时,会将这个Token一起发送回服务器。服务器验证Token的有效...
在IT行业中,Web开发是至关重要的一环,而表单提交是构建交互式Web应用程序的核心功能。本示例“平台和web简单demo 3,表单提交 form get”着重讲解了如何使用HTML表单进行GET请求,以及与Java后端平台的交互。 1. ...
比如,当用户填写表单并点击提交时,JavaScript会捕获这个事件,阻止默认的表单提交行为,然后发送一个Ajax请求到服务器。这个请求通常通过JSON格式传输数据,服务器端的Action方法处理这些数据,完成后返回JSON或...
当用户提交表单时,设置一个标志,然后在后续的提交检查这个标志,如果发现已经提交过,则忽略新的请求。 此外,服务器端的事务管理也是防止重复提交的一种方式。在数据库操作中使用事务,确保一系列操作要么全部...
Token机制的核心思想是在用户提交表单前生成一个唯一的、时间相关的令牌,并将其存储在用户的会话(session)或请求(request)中。当用户提交表单时,将这个令牌一起发送到服务器。服务器端验证令牌的有效性,如果...
在Web开发中,表单提交是一项基础且关键的操作,它允许用户向服务器发送数据进行处理。然而,如果没有适当处理,可能会出现表单重复提交的问题,这可能导致数据的不一致性和服务器资源的浪费。本篇文章将深入探讨...
在IT行业中,尤其是在Web开发领域,防止用户多次重复提交数据是一项重要的任务,这可以避免数据库出现冗余数据,保持系统稳定。"修改禁止多次重复提交"这个话题涉及到前端交互、后端处理以及数据库操作等多个层面。...
为了确保用户在提交表单时不会无意或有意地多次发送请求,我们需要实施有效的防止表单重复提交的策略。以下是一些关键知识点: 1. **表单重复提交的类型**: - **用户行为**:用户可能意外按下刷新按钮,导致已...
在Web编程中,Java Servlet API是用于开发动态Web应用程序的核心技术之一。本实验主要探讨了如何使用Servlet API处理客户端的HTTP请求以及响应。实验的主要目标是实现一个简单的用户注册功能,涉及了表单数据的接收...
在Android开发中,实现一个简单的Web提交表单登录功能,主要涉及到WebView组件的使用,以及JavaScript接口的交互。WebView是Android系统内置的一个组件,它能够加载并显示网页内容,为移动应用提供了内置浏览器的...