当前位置:首页 » 网页前端 » web防止重复提交
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

web防止重复提交

发布时间: 2022-06-11 18:32:43

1. web项目防止重复提交,有什么好的方式

Struts的Token(令牌)机制能够很好的解决表单重复提交的问题,基本原理是:服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看是否匹配。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。

这时其实也就是两点,第一:你需要在请求中有这个令牌值,请求中的令牌值如何保存,其实就和我们平时在页面中保存一些信息是一样的,通过隐藏字段来保存,保存的形式如:〈input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value=""〉,这个value是TokenProcessor类中的generateToken()获得的,是根据当前用户的session id和当前时间的long值来计算的。第二:在客户端提交后,我们要根据判断在请求中包含的值是否和服务器的令牌一致,因为服务器每次提交都会生成新的 Token,所以,如果是重复提交,客户端的Token值和服务器端的Token值就会不一致。下面就以在数据库中插入一条数据来说明如何防止重复提交。

在Action中的add方法中,我们需要将Token值明确的要求保存在页面中,只需增加一条语句:saveToken(request);,如下所示:
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
//前面的处理省略
saveToken(request);
return mapping.findForward("add");
}在Action的insert方法中,我们根据表单中的Token值与服务器端的Token值比较,如下所示:
public ActionForward insert(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
if (isTokenValid(request, true)) {
// 表单不是重复提交
//这里是保存数据的代码
} else {
//表单重复提交
saveToken(request);
//其它的处理代码
}
}

2. j2ee的web项目怎么防止,重复提交的问题

Struts的Token(令牌)机制能够很好的解决表单重复提交的问题,基本原理是:服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看是否匹配。在处理完该请求后,且在答复发送给客户端之前

3. 在web开发中怎么解决重复提交的

1 javascript ,设置一个变量,只允许提交一次。

<script language="javascript"> var checkSubmitFlg = false; function checkSubmit() { if (checkSubmitFlg == true) { return false; } checkSubmitFlg = true; return true; } document.ondblclick = function docondblclick() { window.event.returnValue = false; } document.onclick = function doconclick() { if (checkSubmitFlg) { window.event.returnValue = false; } }</script>

<html:form action="myAction.do" method="post" onsubmit="return checkSubmit();">

2 还是javascript,将提交按钮或者image置为disable

<html:form action="myAction.do" method="post" onsubmit="getElById('submitInput').disabled = true; return true;"> <html:image styleId="submitInput" src="images/ok_b.gif" border="0" /> </html:form>

4. 怎么防止重复提交

最简单的就是js处理,当用户点击提交按钮后用js将按钮置为不可用,如下代码:(代码是网上找到的 大概意思如下)

<inputtype="button"value="提交"onclick="this.disabled=true;this.form.submit()">

这种只能防止用户点击,但是如果用户刷新页面就回再次请求

可以用同步令牌(Token)机制来解决Web应用中重复Form表单提交的问题 ,比如struts就支持

5. Javaweb分页为什么多次点击就卡了

Javaweb分页多次点击就卡了原因:感觉要不在线程方面,要不就是个人电脑IE方面。

一个是数据库的访问量,是否很大!第二就是你代码写的过于繁琐了需要简化,数据资源最好不要浪费,在传值的时候最好能够做一下处理, 如果一次需要传出大量的数据到页面上,我建议你倒不如在ArrayList里 一段一段的取过来!

总的来说,js解决方案是基本可以防止重复点击提交按钮造成的重复提交问题,但是前进后退操作,或者F5刷新页面等问题并不能得到解决。最重要的一点,前端的代码只能防止不懂js的用户,如果碰到懂得js的编程人员,那js方法就没用了。

主要框架:

Java的Web框架虽然各不相同,但基本也都是遵循特定的路数的:使用Servlet或者Filter拦截请求,使用MVC的思想设计架构,使用约定,XML或 Annotation实现配置,运用Java面向对象的特点,面向对象实现请求和响应的流程,支持Jsp,Freemarker,Velocity等视图。

6. JS WEB前端开发如何防止重复提交的实现方

定义一个变量。
var flag= 0;
如果flag=0 就让提交
在提交后,数据没有返回来前,将flag=1
数据返回来后再设置成0
这样就能防止重复提交。非常有效。

7. 怎么不让java web中表单中的某一个数据重复提交

[javascript] view plain
package cn.com.form;

import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import sun.misc.BASE64Encoder;
//产生表单
public class FormServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//产生随机数
TokenProcessor tp=TokenProcessor.getInstance();
String token=tp.generateToken();

request.getSession().setAttribute("token", token);
request.getRequestDispatcher("/form.jsp").forward(request, response);

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}

}
class TokenProcessor//令牌
{

8. 安卓开发 怎么避免重复提交请求

web前端数据请求或者表单提交往往通过对dom的点击事件来操作,但是往往因为认为点击过快(少年手速挺快的嘛),或者因为响应等待使得用户误人为没操作而重复很多次点击,造成表单数据的连续重复提交,造成用户体检的不好,甚至影响到整个系统的安全性。而前端的防治重复提交至少很有效的防治了人为正常操作下的很多不必要麻烦。下面就来讲讲如何有效避免前端的表单重复提交 表单提交有以下几种方式: <form name=”form” method=”post” action=”#"> <input type=”submit” name=”submit” value=”提交"> </form> 另外,还有一种常用的方法是使用图片: 代码如下: <form name=”form” method=”post” action=”# "> <input type=”image” name=”submit” src=”btnSubmit.jpg”> </form> 第三种是使用链接来提交表单,用到了javascript的DOM模型: 代码如下: <form name=”form” method=”post” action=”#”> <a href=”javascript:form.submit();”>提交</a> </form> 实际上这一种是通过js 进行提交。可以理解成 $("form").find("a").click(function(){ $("form").submit(); }); 第一种和第二种可以用js来: $("input[type='submit']").click(function(){ $("form").submit(); }); $("input[name='submit']").click(function(){ $("form").submit(); }); 总之,都是对form进行提交,当然还有出了表单提交还有些请求也要防治重复,比如响应某个事件的ajax请求(提交数据) $.ajax({ url: url, type: "post", data: data, success: function (data) { callback; } }); 那么前面这些提交和请求在网络和性能因素上导致不能及时网络响应并且在事件多次响应时造成的重复,除非在提交响应完成前的点击(触发事件)视为无效,等当前响应完了再去响应下一个请求 如果是表单按钮我们可以这样在点击后将按钮disabled掉 $("input[type='submit']").click(function(){ $(this).attr("disabled",true); $("form").submit(); }); 按道理来说,将点击后将按钮disabled设为true时按钮就不能点击了那么第二次以后点击就无效了,但这样做你会发现同时第一次点击的表单也无法正常提交了(好像是h5的标准后才不行的,无论怎样h5标准的浏览器我试了试都不行),看来是disabled影响了表单的提交,那么先提交后disabled看行不行 $("input[type='submit']").click(function(){ $("form").submit(); $(this).attr("disabled",true); }); 实验结果 ,这样也不行,我们不能猜想submit()回调在click函数最后执行并且.submit()函数内部应该对disabel做了判断(假设这是浏览器内部机制原理),反正在当前这个交互周期里disabled了就不能submit 那么我们可以抛开disabled用代码逻辑来防治重复 $("input[type='submit']").click(function(){ if(!$(this)[0].repeat){ $(this)[0].repeat=true; $("form").submit(); } }); 在当前点击的按钮如果没有repeat的话就进入提交并且设置个值为true的repeat属性,当第二次进来的时候发现有这个属性就不提交,看似这样的逻辑会防治重复提交了,但是事实永远都是残酷的! 是的,当点击过快的时候还是会重复提交,这是因为,如果click里没执行submit的时候html默认的type=submit 的input点击操作会提交表单,举个完整的例子 <form name=”form” method=”post” action=”#"> <input type=”submit” name=”submit” value=”提交"> </form> <form name=”form” method=”post” action=”#"> <input type=”submit” name=”submit” value=”提交"> </form> $("input[type='submit']").click(function(){ console.log("here is click too!"); }); <form name=”form” method=”post” action=”#"> <div>提交</div> </form> $("form").find("div").click(function(){ $("form").submit(); }); 这三个代码都是一个效果提交表单,但是!!!!!!!!!!我们发现阻止表单提交的不就是在当前交互周期(一次点击-》响应-》回调)里,将submit按钮disabled掉吗,好的,少年上代码 $("form").find("div").click(function(){ if(!$(this)[0].repeat){ $(this)[0].repeat=true; $(this).closest("form").submit(); }else{ $(this).attr("disabled",true); } }); 看到没有,第二次点击的时候就disabeld掉了,所以只有第一次成功,第二次的就不会提交了! 当然,如果是其他dom元素防治重复点击那就更简单了 $("div").click(function(){ if(!!$(this)[0].isRepeat){ return; } $(this)[0].isRepeat=1; $.ajax({ url: url, type: "post", data: data, success: function (data) { $(this)[0].isRepeat=0; callback; } }); }); 因为submit()会刷新试图,而ajax不会,所以在回调后需要把判断重复的那个属性赋值为false 这是不是就更简单?我想你会这样认为的! 以上所述是小编给大家介绍的JS WEB 前端开发中防治重复提交的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

9. javaweb防止表单重复提交的几种解决方案

1.js方法解决:关于js方法解决就是说通过js动态控制提交按钮不能多次点击,或者多次点击不起作用。

方案一:通过设立标识使表单不能重复提交:

要强调的是,利用session方法解决表单重复问题是十分完美的,基本上可以应对各种重复提交问题。

但!是不是之前在客户端防止表单重复提交的种种方法就不使用了呢?

答案是否定的,我们需要多种方法混合使用才能达到最好的效果,也许有人会问,不是说session方法基本可以应对各种重复提交问题了吗?

这里我们所说的达到最好效果指的是,给用户更好地体验,例如用户点击了提交按钮,这时将按钮变为不可用的,用以告诉用户你已经提交内容了,不可重复提交。还有如果无论什么情况都用session防止表单重复提交问题,反而无形的增加了服务器端的负担。

10. .net中防止刷新页面重复提交数据的几种方法

1.提交数据后,对页面进行重定向(可以重定向到本页或其他页面)。例子:
Response.Write( " <script language=javascript alert( '操作成功 ');window.location.href=window.location.href; </script ");
2.利用Session,第一次提交数据时把Session设置一个值,如果重复提交的话判断这个Session是否有值存在就可以了。
3.区分是:刷新还是提交(摘抄)
DetectRefresh.aspx
===========================
<%@ Page Inherits= "StevenBey.Web.UI.Page " %<html<head<title Detecting Page Refresh [Demo] </title</head<body<form runat= "server "
<asp:button Text= "Test Refresh " runat= "server " /</formIsRefresh = <%= IsRefresh %</body</htmlStevenBey.Web.UI.Page.cs
======================
namespace StevenBey.Web.UI{public class Page : System.Web.UI.Page{private bool _refreshState;
private bool _isRefresh;
public bool IsRefresh{get{return _isRefresh;}}protected override void LoadViewState(object savedState){object[] allStates = (object[]) savedState;
base.LoadViewState(allStates[0]);
_refreshState = (bool) allStates[1];
_isRefresh = _refreshState == (bool) Session[ "__ISREFRESH "];}protected override object SaveViewState(){Session[ "__ISREFRESH "] = _refreshState;
object[] allStates = new object[2];