zoukankan      html  css  js  c++  java
  • Servlet中表单的重复提交

    1.用户登录页面:

      ->设置一个UUID到session中

      ->将UUID添加到隐藏域中,提交到服务器

    <%
    //进入页面,设置一个UUID,将UUID添加到session中
     String token=UUID.randomUUID().toString();
     session.setAttribute("token", token); 
     %>
    
    <form action="userlogin" method="POST"  >
        <!-- 定义一个隐藏域,将设置的Session对象UUID提交上去 -->
        <input type="hidden" value="${token}" name="token">
        用户名:<input type="text" name="username" placeholder="请输入用户名" required /><br/><br/>
        密 码:<input type="password" name="password" placeholder="请输入密码" required /><br/><br/>
        <input type="submit" value="登录"/>
    </form>

    2.服务器端:

      -->拿到面页传过来隐藏表单里面的token和session里面的token

      -->判断两个token是否相等,假如相等,先将之前页面上设置的session移除,再进行业务处理

      -->注意:这里移除session并不是页面中的隐藏域不会传token过来,只是穿过来的token和第一次穿过来的值不一样,这样,就避免了表单重复提交.

    具体代码如下:

    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    /**
     * 表单重复提交验证
     * 
     * @author Decepticon
     *
     */
    @WebServlet("/userlogin")
    public class SubmitValidate extends HttpServlet {
    
        private static final long serialVersionUID = 1L;
    
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 获取到JSP隐藏表单里的token
            String token = request.getParameter("token");
            // 获取session对象
            HttpSession session = request.getSession();
            // 获取面页session中的token的值
            String sessionToken = (String) session.getAttribute("token");// 将面页传过来的隐藏表单中的token值和session中设置的token值做比较
                if (token.equals(sessionToken)) {
                    // 如果一样,移除面页的session值
                    request.getSession().removeAttribute("token");
                    PrintWriter writer = response.getWriter();
                    writer.write("HelloWorld!");
                    writer.close();
                } else {
                    PrintWriter writer = response.getWriter();
                    writer.write("Please don't always click");
                    writer.close();
                }
        }
    }
  • 相关阅读:
    课程个人总结
    构建之法阅读笔记06
    构建之法读后感5
    第五周进度条
    提高自身能力
    活动图与状态机图
    对分析业务模型----类图的学习与认识
    需求分析工作的基本道理
    问题账户需求分析
    2016秋季个人阅读计划
  • 原文地址:https://www.cnblogs.com/zhang-bo/p/6516992.html
Copyright © 2011-2022 走看看