表单的重复提交

1. 表单重复提交的情况

1)在表单提交到一个servlet,而servlet又通过请求转发的方式响应了一个 JSP(HTML)页面,此时浏览器地址栏还保留着 servlet 的那个路径,在响应页面点击“刷新”。
2)在响应页面没有到达时重复点击“提交按钮”
3)点击“返回”,在点击“提交按钮”

2. 不是重复提交的情况

点击“返回”,“刷新”原表单页面,再点击“提交”。 此时相当于重开一个页面

3. 如何避免表单的重复提交

在表单中做一个标记,提交到servlet时,检查标记是否存在且和预定义的标记一致,若一致,则受理请求并销毁标记;若不一致或没有标记,则直接响应提示信息:“重复提交”
① 仅提供一个隐藏域:不中!

<input type="hidden" name="token" value="tokenValue" />

此方法行不通:没有方法清除固定的请求参数

② 把标记放在request中。不中!
行不通:因为表单被刷新后,request已经被销毁,再提交表单是一个新的request

③ 把标记放在session中,中!

在原表单页面,生成一个随机token。比如:new Data()
在原表单页面,把token值放入session中
在原表单页面,把token值放入隐藏域中
.
在目标的servlet中:获取session和隐藏域中的值
比较两个值是否一致,若一致则受理请求,且把session域中的 token属性清除
若不一致,则直接响应提示页面:“重复提交”

这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值