项目开发日志——注册功能
首先,注册流程与用户相关,业务流程的处理逻辑代码写在Service层中的UserService中。
业务处理逻辑:
- register方法需要传入一个User对象,对对象中的属性进行判断操作,返回的是一个Map集合,里面是一些结果;
- 首先判断user对象是否为空,username、password以及email是否为空,为空则返回map结果集合,键为html中的变量,值为提示的信息;
- 其次,都不为空,则开始判断用户名和邮箱是否和数据库中已经存在的数据相同,具体做法是调用UserMapper中的根据用户名和邮箱来查询,查询的结果为空,则说明不存在,否则向map集合添加信息并返回;
- 接下来,则完善该用户的其他属性,并最后执行插入操作来创建一个用户,此时返回的map为空,说明一切正常。
//注册业务
public Map<String, Object> register(User user) {
Map<String, Object> map = new HashMap<>();
//空值处理
if(user == null) {
throw new IllegalArgumentException("参数不能为空!");
}
if (StringUtils.isEmpty(user.getUsername())) {
map.put("usernameMsg", "账号不能为空!");
return map;
}
if (StringUtils.isEmpty(user.getPassword())) {
map.put("passwordMsg", "密码不能为空!");
return map;
}
if (StringUtils.isEmpty(user.getEmail())) {
map.put("emailMsg", "邮箱不能为空!");
return map;
}
//验证账号
User u = userMapper.selectByName(user.getUsername());
if (u != null) {
map.put("usernameMsg", "该账号已存在!");
return map;
}
//验证邮箱
u = userMapper.selectByEmail(user.getEmail());
if (u != null) {
map.put("emailMsg", "该邮箱已被注册!");
return map;
}
//注册用户
user.setSalt(MooclubUtil.generateUUID().substring(0,5));
user.setPassword(MooclubUtil.md5(user.getPassword() + user.getSalt()));
user.setType(0); //用户类型,普通用户
user.setStatus(0); //用户状态,未激活
user.setActivationCode(MooclubUtil.generateUUID());
//设置用户的默认头像,随机的
user.setHeaderUrl(String.format("http://images.nowcoder.com/head/%dt.png",new Random().nextInt(1000)));
user.setCreateTime(new Date());
userMapper.insertUser(user);
}
接下来,开发Controller层的页面跳转逻辑
这里分为两种情况:
- 一种是注册业务正常执行,返回的map是空
- 这时需要向model域中添加msg信息和跳转的页面
- 返回的页面是操作提示信息页面
- 一种是注册业务有错误情况,map集合中有信息
- 这是需要得到map集合中的内容,并添加到model域中
- 返回的页面是注册页面,并显示提示信息
@RequestMapping(path = "/register", method = RequestMethod.POST)
public String register(Model model, User user) {
//创建map集合来接收UserService的register方法的返回值
Map<String, Object> map = userService.register(user);
if (map == null || map.isEmpty()){
model.addAttribute("msg", "注册成功,请前往邮箱激活!");
model.addAttribute("target", "/index");
return "/site/operate-result";
}else {
model.addAttribute("usernameMsg",map.get("usernameMsg"));
model.addAttribute("passwordMsg",map.get("passwordMsg"));
model.addAttribute("emailMsg",map.get("emailMsg"));
return "/site/register";
}
}
最后,编写HTML页面中的信息
操作提示信息页面
<div class="main">
<p class="lead" th:text="${msg}">您的账号已经激活成功,可以正常使用了!</p>
<hr class="my-4">
<p>系统会在 <span id="seconds" class="text-danger">8</span> 秒后自动跳转,
您也可以点此<a id="target" th:href="@{${target}}" class="text-primary">链接</a>, 手动跳转!
<!-- @{}是跳转页面的逻辑视图; ${}是变量,是controller传来的model域中的target键的值 -->
</p>
</div>
注册信息页面
<form class="mt-5" method="post" th:action="@{/register}">
<div class="form-group row">
<label for="username" class="col-sm-2 col-form-label text-right">账号:</label>
<div class="col-sm-10">
<input type="text"
th:class="|form-control ${usernameMsg!=null?'is-invalid':''}|"
th:value="${user!=null?user.username:''}"
id="username" name="username" placeholder="请输入您的账号!" required>
<div class="invalid-feedback" th:text="${usernameMsg}" />
</div>
</div>
<div class="form-group row mt-4">
<label for="password" class="col-sm-2 col-form-label text-right">密码:</label>
<div class="col-sm-10">
<input type="password"
th:class="|form-control ${passwordMsg!=null?'is-invalid':''}|"
th:value="${user!=null?user.password:''}"
id="password" name="password" placeholder="请输入您的密码!" required>
<div class="invalid-feedback" th:text="${passwordMsg}" />
</div>
</div>
<div class="form-group row mt-4">
<label for="confirm-password" class="col-sm-2 col-form-label text-right">确认密码:</label>
<div class="col-sm-10">
<input type="password" class="form-control"
id="confirm-password" placeholder="请再次输入密码!" required>
<div class="invalid-feedback">两次输入的密码不一致!</div>
</div>
</div>
<div class="form-group row">
<label for="email" class="col-sm-2 col-form-label text-right">邮箱:</label>
<div class="col-sm-10">
<input type="email"
th:class="|form-control ${emailMsg!=null?'is-invalid':''}|"
th:value="${user!=null?user.email:''}"
id="email" name="email" placeholder="请输入您的邮箱!" required>
<div class="invalid-feedback" th:text="${emailMsg}" />
</div>
</div>
<div class="form-group row mt-4">
<div class="col-sm-2"></div>
<div class="col-sm-10 text-center">
<button type="submit" class="btn btn-info text-white form-control">立即注册</button>
</div>
</div>
</form>

浙公网安备 33010602011771号