struts 防止表单重复提交

本文详细解释了表单重复提交的概念及其原因,并列举了三种典型情况。此外还探讨了重复提交可能带来的问题,如增加服务器负载及导致操作错误等。最后提出了两种解决方案:一是前端通过JavaScript阻止用户多次点击提交按钮;二是后端利用session机制配合Token来防止重复提交。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 什么是表单的重复提交? 前提: 在控制器中相应页面的形式为页面的转发而不是重定向.
 1). 若刷新表单页面后, 再提交表单不算重复提交. 除此之外都算为表单的重复提交.
 2). 在不刷新表单页面的前提下:
  ①. 多次点击提交按钮
  ②. 已经提交成功, 然后点击 "刷新(F5)"
  ③. 已经提交成功, 按 "回退" 之后, 再点击 "提交按钮".

2. 重复提交由什么缺点:
 1). 加重了服务器的负担.
 2). 可能导致错误操作.

3. 解决方案:
 1). 在页面上使用 js --> 禁止多次点击 "提交按钮". 可以解决 ①
 2).利用 session 解决服务器端的重复提交问题.
      ①. 不能使用 request 解决重复提交, 因为当前页面刷新以后 request 生命周期结束, 不能把 request 中的属性带到 Action 中.
      ②. 具体步骤:
              -->页面上, 在 session 中放置一个Token
                 <%
                      org.apache.struts.util.TokenProcessor.getInstance().saveToken(request);
                   %>
            -->在 action 中检验该属性是否存在, 若存在(说明是第一次请求) 清除该属性, 受理请求

             ->若在 action 中该属性是不存在, 说明该属性已被清除, 拒绝请求.
             if(TokenProcessor.getInstance().isTokenValid(request)){
                   TokenProcessor.getInstance().resetToken(request);
           }else{

                // 表单重复提交 ,拒绝请求。 
           }

          // 正常请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值