首页 防骗技巧 正文
  • 本文约3249字,阅读需16分钟
  • 10
  • 0

在java jsp中怎样处置用户屡次点击提交按钮形成数据重复 (在Java接口中定义常量,下面语法正确的是())

温馨提示:本文最后更新于2024年8月30日 14:26,若内容或图片失效,请在下方留言或联系博主。
摘要

本文目录导航,在javajsp中怎样处置用户屡次点击提交按钮形成数据重复javaweb防止表单重复提交的几种处置打算struts2如何防止表单重复提交在javajsp中怎样处置用户屡次点击提交按钮形成数据重复javaweb防止表单重复提交的几种处置打算方法处置,对于js方法处置就是说经过js灵活管理提交按钮不能屡次点击,或许屡次点击不...。

本文目录导航:

在java jsp中怎样处置用户屡次点击提交按钮形成数据重复

javaweb防止表单重复提交的几种处置打算

方法处置:对于js方法处置就是说经过js灵活管理提交按钮不能屡次点击,或许屡次点击不起作用。

打算一:经过设立标识使表单不能重复提交:

var flag=true;function Sub(){if(flag){flag = false;();}}

打算二:一次性点击后使得提交按钮变成无法用

总的来说,js处置打算是基本可以防止重复点击提交按钮形成的重复提交疑问,然而行进前进操作,或许F5刷新页面等疑问并不能获取处置。

最关键的一点,前端的代码只能防止疑问js的用户,假设碰到懂得js的编程人员,那js方法就没用了。

2.设置HTTP报头,管理表单缓存,使得所管理的表单不缓存消息,这样用户就无法经过重复点击按钮去重复提交表单。

然而这样做也有局限性,用户在提交页面点击刷新也会形成表单的重复提交。

3.经过PRG设计形式(用来防止F5刷新重复提交表单):

PRG形式经过照应页面Header前往HTTP形态码启动页面跳转代替照应页面跳转环节。详细环节如下:

客户端用POST方法恳求主机端数据变卦,主机对客户端发来的恳求启动处置重定向到另一个结果页面上,客户端一切对页面的显示恳求都用get方法告知主机端,这样做,前进再行进或刷新的行为都收回的是get恳求,不会对server发生任何数据更改的影响。

但此方法也不能防止一切状况:例如用户屡次点击提交按钮;恶意用户避开客户端预防屡次提交手腕,启动重复提交恳求;

以上都说的是在客户端如何防止表单重复提交,上方说一下主机端有哪些可行的方法。

4.假设是注册或存入数据库的操作,可以经过在数据库中字段设立惟一标识来处置,这样在启动数据库拔出操作时,由于每次拔出的数据都相反,数据库会拒绝写入。

这样也防止了向数据库中写入渣滓数据的状况,同时也处置了表单重复提交疑问。

然而这种方法在业务逻辑上觉得是说不过去的,原本该有的逻辑,缺由于数据库该有的设计暗藏了。 下面语法正确的是

而且这种方法也有必定的性能局限性,只实用于某系特定的拔出操作。

方法:

在struts框架中防止表单重复提交的方法是生成Token存入session,以此判别表单能否是第一次性提交。

以下给大家解释一下运转流程。

首先客户端恳求主机中的表单,主机将客户机所恳求的表单发给客户机同时发送一个不凡的随机数(Token)作为表单号存在表单的暗藏域中(type=hidden),并且存入主机端的session中。

在客户端填写完表单内容向主机提交时,同时也将暗藏域中的表单号发给主机端,主机端此时会检测主机端的表单号能否存在,假设存在,则启动提交操作,并删除此表单号,否则,主机视为客户机端重复提交表单,不予操作。

此处贴出世成Token的代码(保障随机数的举世无双性):

class Token{private Token(){}private static Token instance = new Token();public Token getinstance(){return instance;}//随机数出现器public String getToken(){String token = () + + new Random()();//取得毫秒数加随机数try {MessageDigest md = (md5);byte[] md5 = (());BASE64Encoder base = new BASE64Encoder();(md5);} catch (NoSuchAlgorithmException e) {();}return null;}}

要强调的是,应用session方法处置表单重复疑问是十分完美的,基本上可以应答各种重复提交疑问。

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

答案能否认的,咱们须要多种方法混合经常使用能力到达最好的成果,兴许有人会问,不是说session方法基本可以应答各种重复提交疑问了吗?

这里咱们所说的到达最好成果指的是,给用户更好地体验,例如用户点击了提交按钮,这时将按钮变为无法用的,用以通知用户你曾经提交内容了,无法重复提交。

还有假设无论什么状况都用session防止表单重复提交疑问,反而有形的参与了主机端的累赘。

struts2 如何防止表单重复提交

一、形成重复提交关键的两个要素:在往常的开发环节中,经常可以遇到表单重复提交的疑问,如做一个注册页面,假设表单重复提交,那么一个用户就会注册屡次,重复提交关键由于两种要素。

1、 一是,主机处置期间久。

当用户在表单中填完消息,点击“提交”按钮后,由于主机反响期间过长没能及时看到照应消息,或许出于其它目标,再次点击“提 交”按钮,从而造成在主机端接纳到两条或多条相反的消息。

假设消息须要存储到后盾数据库中,如此以来就会发生数据库操作意外揭示消息,以致于给用户带来 失误消息揭示,从而给用户的经常使用带来不便。

2、二是,forward跳转惹起的重复提交。

在页面跳转的时刻,有两种类型:恳求转发和重定向,所谓恳求转发是在主机端启动跳转,对用户是透明的,此时阅读器中的地址不会出现扭转,重定向是在客户端出现跳转,跳转时刻阅读器中的地址栏会出现扭转,假设在注册时,经常使用了恳求转发,那么当刷新页面时,就会惹起表单的重复提交二、处置打算打算一、经常使用struts2中的token阻拦器或许tokenSession阻拦器对token的便捷了解:1)当用户初次访问蕴含表单的页面时,主机会在这次会话中创立一个session对象,并发生一个令牌值,而后将这个令牌值作为暗藏输入域的值,随表繁多同发送到主机端,同时将令牌值保留到Session中。

2) 当用户提交页面时,主机首先判别恳求参数中的令牌值和Session中保留的令牌值能否相等,若相等,则分明Session中的令牌值,而后口头数据处 理操作。

假设不相等,则揭示用户曾经提交过了表单,同时发生一个新的令牌值,保留到Session中。

当用户从新访问提交数据页面时,将新发生的令牌值作 为暗藏输入域的值。

####token: 在优惠Action中审核合法则牌(token), 防止表单的重复提交;token-session: 同上, 然而在接到合法则牌时将提交的数据保留在session中;关键步骤如下:第一步:在表单中参与<s:token />(当然啦!要首先导入struts2的标签库 <%@taglib uri=/struts-tags prefix=s %>)<s:form action=helloworld_other method=post namespace=/test><s:textfield/><s:token/><s:submit/></s:form>第二步:在性能文件中相应的action上性能token阻拦器或许tokenSession阻拦器。

此阻拦器只能用在有form的提交恳求上。

<action method={1}><interceptor-ref/><interceptor-ref /><result>/WEB-INF/page/</result><result>/WEB-INF/page/</result></action>以上性能参与了“token”阻拦器和“”结果,由于“token”阻拦器在会话的token与恳求的token不分歧时,将会间接前往“”结果。

打算二:基于第二种重复提交表单的要素,主机外部经常使用重定向在Struts2中的中,result标签的type自动值是 dispatcher,(恳求转发),要成功以上的性能,必需不能经常使用自动值,须要将其值设为redirectAction(重定向到某一 Action),也就是说重一个Action跳转到另外一个Action,此时阅读器中的地址是第二个Action,联合到上方的需求,可以再第一个 Action中将记载参与到数据库中,而后在第二个Action中将数据读取进去。

以后每次刷新,那么只会口头第二个Action。

到中找到与redirectionAction对应的一个类,ServletActionRedirectResult从Api文档中发现找出外面有一个字段叫做actionName,指定须要跳转的Action性能方法如下:<action><result type=redirectAction><param>show_show</param></result></action>至于第二个Action的性能方法,置信学过struts2的同窗都会。

评论