如何避免表单的重复提交

        表单的重复提交

  1. 表单的重复提交

   1).重复提交的情况:

在表单提交到一个Servelt,而Servelet又通过请求转发的方式响应了一个JSP(HTML)的页面,此时地址还保留着Servlet的那个路径,在响应页面点击刷新:

 

 

②在响应页面没有及时到达时重复点击“提交按钮”,则会重复提交数据

 

③点击“返回”,再点击“提交”如果刷新了页面则不是重复提交

 

 

  1. 如何避免表单的重复提交:再表单中做一个标记,提交到Servlet时,检查是否存在和预定义的标志一致,若一致,则受理请求则销毁标记,若不一致或没有标记,则直接响应提示信息:“重复提交”

   ①把标记放到隐藏域中<input type=”hidden” name=”token” value=”stupid_qiu”/> 不可以 因为不能删除标记

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

  ③把标记放到Session中  行得通

>z在原表单页面,生成一个随机的值token

>在原表单页面,把token值放入到Session属性中

>在原表单页面,把token值放入到隐藏域中

 

>在目标的Servlet中:获取session和隐藏域中的token值

>比较二个值是否一致,若一致,受理请求。且把session域中的token属性清楚

>若不一致,则直接响应也是页面“重复提交”

         Index.jsp

       <%

          

          String tokenValue = new Date().getTime() + "";

          session.setAttribute("token", tokenValue);

          System.out.println("1");

          %>

    <form action="<%=request.getContextPath() %>/tokenServlet" method="post">

              

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

        name: <input type="text" name ="name" />

              <input type="submit" value="submit">

    

    </form>

 

 

            Servlet

  HttpSession session = request.getSession();

Object token = session.getAttribute("token");

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

System.out.println(token);

System.out.println(tokenValue);

if (token != null && token.equals(tokenValue)) {

   session.removeAttribute("token");

else {

  response.sendRedirect(request.getContextPath() + "/token/error.jsp");

return;

}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值