Java打怪之路-----JavaWeb之表单重复提交与验证码

(一)表单重复提交的三种情况

一:提交完表单。服务器使用请求转来进行页面跳转。这个时候,用户按下功能键 F5,就会发起最后一次的请求。

造成表单重复提交问题。解决方法:使用重定向来进行跳转

二:用户正常提交服务器,但是由于网络延迟等原因,迟迟未收到服务器的响应,这个时候,用户以为提交失败,就会着急,然后多点了几次提交操作,也会造成表单重复提交。

三:用户正常提交服务器。服务器也没有延迟,但是提交完成后,用户回退浏览器。重新提交。也会造成表单重复提交。

针对第二三种表单重复提交,解决办法是使用验证码进行解决。
在这里插入图片描述实现代码:
在userServlet程序中,有regist方法

protected void regist(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
            IOException {
    
    
        //1、获取session中的验证码
        String token=(String) req.getSession().getAttribute(KAPTCHA_SESSION_KEY);
        //2、删除session中的验证码
        req.getSession().removeAttribute(KAPTCHA_SESSION_KEY);
        String username=req.getParameter("username");
        String password=req.getParameter("password");
        String email=req.getParameter("email");
        String code=req.getParameter("code");
        //首先看验证码是否正确
        if(token!=null&&token.equalsIgnoreCase(code)){
    
    
            if(userService.existsUsername(username)){
    
    
                System.out.println("用户名已经存在");
                req.setAttribute("msg","用户名已经存在");
                req.setAttribute("username",username);
                req.setAttribute("email",email);
                req.getRequestDispatcher("/pages/user/regist.jsp").forward(req,resp);
            }else{
    
    
                userService.registUser(new User(null,username,password,email));
                req.getRequestDispatcher("/pages/user/regist_success.jsp").forward(req,resp);
            }
        }
        else{
    
    
            req.setAttribute("msg","验证码错误");
            req.setAttribute("username",username);
            req.setAttribute("email",email);
            System.out.println("验证码错误");
            req.getRequestDispatcher("/pages/user/regist.jsp").forward(req,resp);

        }
    }

(二)验证码的相关知识

2.1验证码的切换

这里注意,如果不加newDate这个代码,他再火狐浏览器中会有缓存,这样点击第二次就无法切换了

// 给验证码的图片,绑定单击事件
$("#code_img").click(function () {
    
    
// 在事件响应的 function 函数中有一个 this 对象。这个 this 对象,是当前正在响应事件的 dom 对象
// src 属性表示验证码 img 标签的 图片路径。它可读,可写
// alert(this.src);
this.src = "${basePath}kaptcha.jpg?d=" + new Date();
});

猜你喜欢

转载自blog.csdn.net/weixin_44020747/article/details/118074243