Java笔记--Session:避免表单的重复提交

 关于表单的重复提交,其实是围绕“请求”展开,请求多次便是重复提交了

(一)表单重复提交情况:

a.表单提交“请求”到servlet后,servlet再将“请求”转发到一个jsp页面,在响应页面点击刷新。分析:点击刷新时,地址栏中的URL还是原来的请求输入的地址,点击刷新后,就是发出再一次的请求,所以表单重复提交。

b.当有网络延迟,或者线程阻塞的情况下,在响应页面没有到达时,重复点击提交按钮。分析:很明显,浏览器发出了多次请求,表单重复提交。

c.在响应页面,点击返回,再点击“提交”。分析:和a其实是一个效果

(二)如何避免表单的重复提交

a.在表单中:

<body>

  <% 
  //在原表单页面,生成一个token随机值,
       String tokenValue=new Date().getTime() +""; 
  %>
<form method="post" action="/SuccessServlet">
  <%  
  //把token放入session中
       session.setAttribute("token",tokenValue); 
  %>
  <!-- 把token放入隐藏域中 -->
<input type="hidden" name="token" value=<%=tokenValue %>/>

  name:<input type="text" name="name"/>
  <input type="submit" value="提交"/>
</form>
</body>

b.在servlet中:

 //表单的token提交到servlet时,检查标记是否和已经存在的session中的token值一致,
 //若一致,则相应请求,并销毁标记,若不一致或者没有标记则直接相应提示信息----表单重复提交
        HttpSession session = request.getSession();
       Object token =  session.getAttribute("token");

       String tokenValue = request.getParameter("token");

       if(token.equals(tokenValue) &&token != null){
           session.removeAttribute("token");
       }else{
           response.sendRedirect(request.getContextPath()+"/error.jsp");
       }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值