web表单重复提交验证

来源:互联网 发布:轩辕网络财务报告 编辑:程序博客网 时间:2024/06/08 05:57

首先是工具类

public class RandomUtil {    private static final RandomUtil RANDOM_UTIL = new RandomUtil();    private final Random random = new Random();    private RandomUtil(){    }    public static RandomUtil getRandomUtil(){        return RANDOM_UTIL;    }    //用来返回一个随机数,用作创建表单隐藏ID    public String random(){        return System.currentTimeMillis()+""+random.nextInt(9999999)+"";    }}

jsp部分

<%@page import="util.RandomUtil"%><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>表单重复提交验证</title>    <script type="text/javascript">        //创建一个全局变量.默认为false,表示表单还未提交        var flag = false;        function verify (){            if(!flag){                alert("第一次提交");                //提交后flag改为true,表示表单已经提交                flag=true;                return true;            }else{                alert("重复");                return false;            }        }    </script>  </head>  <body>    <!-- 工具类创建ID,且存入form表单和Session中 -->    <%        String id = RandomUtil.getRandomUtil().random();        session.setAttribute("id",id);    %>    <!-- <form>根据onsubmit的返回值判定是否提交 -->    <form action="${pageContext.request.contextPath}/IsGet" method="get" onsubmit="return verify()">        <!-- 将上面工具类创建的ID存入表单的隐藏字段 -->        <input type="hidden" value="<%=id %>" name="id"/>        <input type="submit" value="表单重复提交验证" />    </form>  </body></html>

web后台

public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        String id = (String) request.getSession().getAttribute("id");        String reqId = (String) request.getParameter("id");        //睡眠模拟延迟状态        try {            Thread.sleep(4000);        } catch (InterruptedException e) {            e.printStackTrace();        }        HttpSession session = request.getSession();        //如果表单的隐藏ID和Session中的ID为空或者不一致,判为重复提交        if(id==null||reqId==null||!id.equals(reqId)){            session.setAttribute("message","重复提交");        }else{            request.getSession().removeAttribute("id");            session.setAttribute("message","提交成功");        }        //这里用重定向的原因是:重定向会改变地址栏的URL,防止用户刷新重新提交response.sendRedirect(request.getContextPath()+"/message.jsp");    }

用来接收消息的message.jsp

    ....    ${message }    ....
1 0
原创粉丝点击