• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
Asuka-Rimuru
帮助1

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

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

学新通

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

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

  1.  
    //提交注册信息给后台
  2.  
    $.post("RegisterServlet", $('#register_form').serialize(), function (data) {
  3.  
    if (data.flag) { //接收后台验证是否通过
  4.  
    //通过
  5.  
    registerHandOff();
  6.  
    document.getElementById("register_code_i").value = "";
  7.  
    } else {
  8.  
    //未通过获取后台错误信息并打印`
  9.  
    let errors = data.errors;
  10.  
    for (let key in errors) {
  11.  
    registerErrors(key, errors[key]);
  12.  
    showPrompt(false, errors[key]);
  13.  
    }
  14.  
    }
  15.  
    });
学新通

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

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

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

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

首先是RegisterServlet类

  1.  
    protected void service(HttpServletRequest req, HttpServletResponse resp) {
  2.  
    //注册信息
  3.  
    //创建注册实例化对象
  4.  
    UserRegisterAccount userA = new UserRegisterAccount();
  5.  
    try {
  6.  
    //编码处理
  7.  
    req.setCharacterEncoding("UTF-8");
  8.  
    resp.setContentType("text/html;charset=UTF-8");
  9.  
    //获取表单数据
  10.  
    BeanUtils.populate(userA, req.getParameterMap());
  11.  
    } catch (Exception e) {
  12.  
    e.printStackTrace();
  13.  
    }
  14.  
    //创建表单数据验证对象
  15.  
    FormDataService fds = new FormDataService();
  16.  
    //调用service层进行验证,返回结果对象
  17.  
    ResultInfo resultInfo = fds.registerForm(userA);
  18.  
    //json返回
  19.  
    JsonReturn.jsonReturns(resp, resultInfo);
  20.  
    }
学新通

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

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

  1.  
    /**
  2.  
    * @param userA: 用户注册实例,用于注册信息验证
  3.  
    * @return : 返回resultinfo实例,前台接收
  4.  
    * @description : 注册表单验证;接收controller层的数据进行处理,再提交给dao层进行处理,最终返回结果给controller层
  5.  
    */
  6.  
    public ResultInfo registerForm(UserAccount userA) {
  7.  
     
  8.  
    ResultInfo rif = new ResultInfo(); //创建结果返回对象实例
  9.  
    UserDataService uds = new UserDataServiceImpl(); //创建用户数据验证对象
  10.  
    Map<String, String> errors = uds.registerAction(userA); //创建错误返回集接收用户注册验证的错误集
  11.  
    UserDao userDao = new UserDaoImpl(); //创建用户数据库操作对象
  12.  
    EmailDao emailDao = new EmailDaoImpl(); //创建邮箱数据库操作对象
  13.  
    //查找用户名是否有重复,有重复添加错误进错误集合
  14.  
    if (!userDao.findUserNameRepeat(userA)) errors.put("userName", "此用户名已被使用");
  15.  
    //查找邮箱是否有重复,有重复添加错误进错误集合
  16.  
    if (!emailDao.findUserEmailRepeat(userA)) errors.put("email", "此邮箱已被使用");
  17.  
    //错误集合为空并且用户邮箱表数据添加成功允许注册
  18.  
    if (errors.isEmpty()) {
  19.  
    int uid = userDao.findMaxUid(); //找到最大的uid
  20.  
    if (uid == 0) uid = 1000000;
  21.  
    userA.setUid( uid); //为用户创建uid
  22.  
    userDao.addUser(userA); //添加用户数据到用户表
  23.  
    userDao.addUserToEmail(userA);
  24.  
    Email email = emailDao.findEmailAll(userA); //创建邮箱实例接收创建的邮箱表数据
  25.  
    rif.setData(email); //结果对象实例传入email实例
  26.  
    rif.setFlag(true); //设置返回标识为true
  27.  
    } else { //驳回注册
  28.  
    rif.setFlag(false); //设置返回标识为true
  29.  
    rif.setErrors(errors); //错误信息集合返回
  30.  
    }
  31.  
    return rif;
  32.  
    }
学新通

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

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

  1.  
    /**
  2.  
    * @param userA: 用户实例,获取实例中的属性进行验证
  3.  
    * @return : 返回验证完毕后的错误集合
  4.  
    * @description : 注册信息验证,将处理完结果的错误集返回给调用者
  5.  
    */
  6.  
    @Override
  7.  
    public Map<String, String> registerAction(UserAccount userA) {
  8.  
    //获取用户名与密码的验证
  9.  
    Map<String, String> errors = UserNameAndPassWord(userA);
  10.  
    String passWord = userA.getPassWord(); //获取密码
  11.  
    String confirmThePassWord = userA.getConfirmThePassword(); //获取确认密码
  12.  
    String email = userA.getEmail(); //获取邮箱
  13.  
    if (confirmThePassWord == null || "".equals(confirmThePassWord)) { //判断确认密码为空
  14.  
    errors.put("confirmThePassword", "确认密码不能为空");
  15.  
    } else if (!(passWord.equals(confirmThePassWord))) { //判断两次密码是否一致
  16.  
    errors.put("confirmThePassword", "两次密码不一致");
  17.  
    }
  18.  
    if (email == null || "".equals(email)) { //判断邮箱为空
  19.  
    errors.put("email", "邮箱不能为空"); //邮箱正则
  20.  
    } else if (!(email.matches("^\\s*\\w (?:\\.?[\\w-] )*@[a-zA-Z0-9] (?:[-.][a-zA-Z0-9] )*\\.[a-zA-Z] \\s*$"))) {
  21.  
    errors.put("email", "邮箱格式不正确");
  22.  
    }
  23.  
    return errors;
  24.  
    }
  25.  
     
  26.  
     
  27.  
    /**
  28.  
    * @param userA: 用户实例,获取实例中的属性进行验证
  29.  
    * @return : 返回验证完毕后的错误集合
  30.  
    * @description : 用户和密码的非空与规范验证,将处理完结果的错误集返回给调用者
  31.  
    */
  32.  
    public Map<String, String> UserNameAndPassWord(UserAccount userA) {
  33.  
    Map<String, String> errors = new HashMap<>(); //创建错误集合
  34.  
    String userName = userA.getUserName(); //获取用户名
  35.  
    String passWord = userA.getPassWord(); //获取密码
  36.  
    if (userName == null || "".equals(userName)) { //判断用户名为空
  37.  
    errors.put("userName", "用户名不能为空");
  38.  
    } else if (!(userName.matches("^[a-zA-Z0-9]{6,20}$"))) { //用户名正则
  39.  
    errors.put("userName", "用户名不规范");
  40.  
    }
  41.  
    if (passWord == null || "".equals(passWord)) { //判断密码为空
  42.  
    errors.put("passWord", "密码不能为空");
  43.  
    } else if (!(passWord.matches("^(?=.*[0-9])(?=.*[a-zA-Z])(.{8,20})$"))) { //密码正则
  44.  
    errors.put("passWord", "密码不规范");
  45.  
    }
  46.  
    return errors;
  47.  
    }
学新通

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

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

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

然后使用json返回给前台

  1.  
    public class JsonReturn {
  2.  
     
  3.  
    /**
  4.  
    * @param resp: resp对象
  5.  
    * @param resultInfo: 返回结果实例
  6.  
    * @description : 表单提交返回前台数据
  7.  
    */
  8.  
    public static void jsonReturns(HttpServletResponse resp, ResultInfo resultInfo) {
  9.  
    try {
  10.  
    ObjectMapper mapper = new ObjectMapper();
  11.  
    String json = mapper.writeValueAsString(resultInfo);
  12.  
    resp.setContentType("application/json;charset=UTF-8");
  13.  
    resp.getWriter().write(json);
  14.  
    } catch (Exception e) {
  15.  
    e.printStackTrace();
  16.  
    }
  17.  
    }
  18.  
    }
学新通

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

到此注册功能就写完啦

这篇好文章是转载于:编程之路

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 编程之路
  • 本文地址: /boutique/detail/tanhgkibch
系列文章
更多 icon
同类精品
更多 icon
继续加载