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 : 注册信息验证,将处理完结果的错误集返回给调用者
-
*/
-
-
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就能知道用户是否注册成功
到此注册功能就写完啦
这篇好文章是转载于:编程之路
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 编程之路
- 本文地址: /boutique/detail/tanhgkibch
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13