zoukankan      html  css  js  c++  java
  • Struts2之防止表单重复提交

    时间:2017-1-14 22:29

    ——普通方法

    如何解决表单重复提交?
        在JSP页面中生成一个令牌(随机字符串),将其存储到session中,并在表单中携带,提交给服务器。
        在服务器端获取请求参数时,同时获取令牌,将她与session中存储的token进行比较,如果没问题,则执行操作。
        获取令牌后马上将session中的令牌删除。

    示例代码:

        JSP页面:
            <body>

            <%
                String token = UUID.randomUUID().toString();
                session.setAttribute("token", token);
            %>
     
            <form action="${pageContext.request.contextPath}/RegistServlet" method="post">
                <input type="hidden" name="token" value="<%=token %>" />
                username:<input type="text" name="username" /><br />
                <input type="submit" value="注册" />
            </form>
    </body>


        Servlet:
            public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

     
                response.setContentType("text/html;charset=utf-8");
     
                String token = (String) request.getSession().getAttribute("token");
                String _token = request.getParameter("token");
     
                request.getSession().removeAttribute("token");
     
                if(_token.equals(token)){
                    System.out.println("注册成功:" + request.getParameter("username"));
                } else {
                    response.getWriter().print("禁止重复提交表单");
                }
            }


    ——Struts2解决表单重复提交

    在Struts2中解决表单重复提交的问题,可以使用Struts2定义的一个Interceptor:token

    token拦截器没有在默认的18个拦截器(defaultStack)中。

    步骤
        1、在页面中使用token tag标签
            >   会在页面上生成一个令牌,并存在于表单中。
        2、在<action>标签中引入<token>拦截器。
            >   <interceptor-ref name="token"/>
        3、配置invalid.token视图
            >   <result name="invalid.token">/index.jsp</result>
        4、在页面中使用<s:actionerror />标签显示错误信息。

    JSP页面示例代码:

        <form action="${pageContext.request.contextPath}/regist" method="post">
            <s:token/>
            username:<input type="text" name="username" /><br />
            <input type="submit" value="注册" />

        </form> 

  • 相关阅读:
    一些常用的 Git 进阶知识与技巧
    自动充值平台开发进程之联通卡密一最终实现
    自动充值平台开发进程之联通卡密一准备阶段
    自动充值平台开发进程之联通卡密一显示界面
    [注入] 突破 SESSION 0 隔离的远线程注入
    git 撤销 push 提交
    [C#] 获取时间戳(秒/毫秒)
    html判断浏览器是否支持,不支持则输出
    [C#] MD5 加密
    [Windows驱动开发] 进程的pid handle eprocess之间相互转换的方法
  • 原文地址:https://www.cnblogs.com/wwwwyc/p/6375440.html
Copyright © 2011-2022 走看看