javaweb实现登录注册案例(二)

上一期大致讲到了前台验证的方面,接下来就是要向后台提交数据

首先要给予注册按钮的点击事件

进来之后先判断我们之前给的标志位是否全部通过

确认数据无误后再使用ajax向后台提交数据

//提交注册信息给后台
    $.post("RegisterServlet", $('#register_form').serialize(), function (data) {
        if (data.flag) {    //接收后台验证是否通过
            //通过
            registerHandOff();
            document.getElementById("register_code_i").value = "";
        } else {
            //未通过获取后台错误信息并打印`
            let errors = data.errors;
            for (let key in errors) {
                registerErrors(key, errors[key]);
                showPrompt(false, errors[key]);
            }
        }
    });

将我们的注册数据提交给RegisterServlet类

$('#register_form').serialize()是将表单的值序列化成json

使用回调函数判断是否注册成功

然后就是编写后台的代码了

首先是RegisterServlet类

protected void service(HttpServletRequest req, HttpServletResponse resp) {
        //注册信息
        //创建注册实例化对象
        UserRegisterAccount userA = new UserRegisterAccount();
        try {
            //编码处理
            req.setCharacterEncoding("UTF-8");
            resp.setContentType("text/html;charset=UTF-8");
            //获取表单数据
            BeanUtils.populate(userA, req.getParameterMap());
        } catch (Exception e) {
            e.printStackTrace();
        }
        //创建表单数据验证对象
        FormDataService fds = new FormDataService();
        //调用service层进行验证,返回结果对象
        ResultInfo resultInfo = fds.registerForm(userA);
        //json返回
        JsonReturn.jsonReturns(resp, resultInfo);
    }

BeanUtils.populate(userA, req.getParameterMap());用user对象接收前台传递的注册信息

然后创建seervice对象与结果集对象

/**
     * @param userA: 用户注册实例,用于注册信息验证
     * @return : 返回resultinfo实例,前台接收
     * @description : 注册表单验证;接收controller层的数据进行处理,再提交给dao层进行处理,最终返回结果给controller层
     */
    public ResultInfo registerForm(UserAccount userA) {

        ResultInfo rif = new ResultInfo();      //创建结果返回对象实例
        UserDataService uds = new UserDataServiceImpl();        //创建用户数据验证对象
        Map<String, String> errors = uds.registerAction(userA); //创建错误返回集接收用户注册验证的错误集
        UserDao userDao = new UserDaoImpl();        //创建用户数据库操作对象
        EmailDao emailDao = new EmailDaoImpl();     //创建邮箱数据库操作对象
        //查找用户名是否有重复,有重复添加错误进错误集合
        if (!userDao.findUserNameRepeat(userA)) errors.put("userName", "此用户名已被使用");
        //查找邮箱是否有重复,有重复添加错误进错误集合
        if (!emailDao.findUserEmailRepeat(userA)) errors.put("email", "此邮箱已被使用");
        //错误集合为空并且用户邮箱表数据添加成功允许注册
        if (errors.isEmpty()) {
            int uid = userDao.findMaxUid(); //找到最大的uid
            if (uid == 0) uid = 1000000;
            userA.setUid(++uid);    //为用户创建uid
            userDao.addUser(userA);     //添加用户数据到用户表
            userDao.addUserToEmail(userA);
            Email email = emailDao.findEmailAll(userA);     //创建邮箱实例接收创建的邮箱表数据
            rif.setData(email);         //结果对象实例传入email实例
            rif.setFlag(true);          //设置返回标识为true
        } else {    //驳回注册
            rif.setFlag(false);     //设置返回标识为true
            rif.setErrors(errors);  //错误信息集合返回
        }
        return rif;
    }

FormDataService对象里的registerFrom方法里,创建UserDataService对象

然后用UserDataService对象里的registerAction方法验证注册信息是否规范,使用errors集合接收返回的错误信息

/**
     * @param userA: 用户实例,获取实例中的属性进行验证
     * @return : 返回验证完毕后的错误集合
     * @description : 注册信息验证,将处理完结果的错误集返回给调用者
     */
    @Override
    public Map<String, String> registerAction(UserAccount userA) {
        //获取用户名与密码的验证
        Map<String, String> errors = UserNameAndPassWord(userA);
        String passWord = userA.getPassWord();  //获取密码
        String confirmThePassWord = userA.getConfirmThePassword();  //获取确认密码
        String email = userA.getEmail();    //获取邮箱
        if (confirmThePassWord == null || "".equals(confirmThePassWord)) {  //判断确认密码为空
            errors.put("confirmThePassword", "确认密码不能为空");
        } else if (!(passWord.equals(confirmThePassWord))) {    //判断两次密码是否一致
            errors.put("confirmThePassword", "两次密码不一致");
        }
        if (email == null || "".equals(email)) {    //判断邮箱为空
            errors.put("email", "邮箱不能为空");      //邮箱正则
        } else if (!(email.matches("^\\s*\\w+(?:\\.?[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$"))) {
            errors.put("email", "邮箱格式不正确");
        }
        return errors;
    }


/**
     * @param userA: 用户实例,获取实例中的属性进行验证
     * @return : 返回验证完毕后的错误集合
     * @description : 用户和密码的非空与规范验证,将处理完结果的错误集返回给调用者
     */
    public Map<String, String> UserNameAndPassWord(UserAccount userA) {
        Map<String, String> errors = new HashMap<>();   //创建错误集合
        String userName = userA.getUserName();      //获取用户名
        String passWord = userA.getPassWord();      //获取密码
        if (userName == null || "".equals(userName)) {  //判断用户名为空
            errors.put("userName", "用户名不能为空");
        } else if (!(userName.matches("^[a-zA-Z0-9]{6,20}$"))) {    //用户名正则
            errors.put("userName", "用户名不规范");
        }
        if (passWord == null || "".equals(passWord)) {  //判断密码为空
            errors.put("passWord", "密码不能为空");
        } else if (!(passWord.matches("^(?=.*[0-9])(?=.*[a-zA-Z])(.{8,20})$"))) {   //密码正则
            errors.put("passWord", "密码不规范");
        }
        return errors;
    }

之后判断返回的集合内信息是否为空,如果为空说明数据验证通过

然后再进入dao层根据用户信息查询数据库内是否有重复,如果这里也验证通过后就可以向数据库添加用户信息了

注册成功将结果集对象的flag属性设置为true,注册失败设置为false

然后使用json返回给前台

public class JsonReturn {

    /**
     * @param resp:       resp对象
     * @param resultInfo: 返回结果实例
     * @description : 表单提交返回前台数据
     */
    public static void jsonReturns(HttpServletResponse resp, ResultInfo resultInfo) {
        try {
            ObjectMapper mapper = new ObjectMapper();
            String json = mapper.writeValueAsString(resultInfo);
            resp.setContentType("application/json;charset=UTF-8");
            resp.getWriter().write(json);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

前台再使用ajax回调函数判断这个flag就能知道用户是否注册成功

到此注册功能就写完啦

猜你喜欢

转载自blog.csdn.net/hy123154/article/details/127798212