二、逻辑流程
总体流程:前端的注册信息->传入controller中->传给service判断数据是否合法,合法就注册成功,返回map给controller->controller判断map,给model加响应的信息,返回给前端控制器去判断。然后返回相应的
1.前端表单注册页面把信息给controller层
//定义一个方法来处理注册的请求,要post
//只要传入的值和User对象相匹配,基于同名原则springMVC会自动匹配
@RequestMapping(path = "/register",method = RequestMethod.POST)
public String register(Model model, User user){
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("usernameMessage"));
model.addAttribute("passwordMsg",map.get("passwordMessage"));
model.addAttribute("emailMsg",map.get("emailMessage"));
return "/site/register";
}
}
2.controller层中调用service服务层中的register方法进行注册
public Map<String,Object> register(User user){
Map<String,Object> map = new HashMap<>();
//判断是否空值
if (user==null){
throw new IllegalArgumentException("参数不能为空");
}
if (StringUtils.isBlank(user.getUsername())){
map.put("usernameMessage","账号不能为空");
return map;
}
if (StringUtils.isBlank(user.getPassword())){
map.put("passwordMessage","密码不能为空");
return map;
}
if (StringUtils.isBlank(user.getEmail())){
map.put("emailMessage","密码不能为空");
return map;
}
//验证账号
User u = userMapper.selectByName(user.getUsername());
if (u!=null){
map.put("usernameMessage","该账号已存在");
return map;
}
//验证邮箱
u = userMapper.selectByEmail(user.getEmail());
if (u!=null){
map.put("emailMessage","该邮箱已被注册");
return map;
}
//注册用户
user.setSalt(CommunityUtil.generateUUID().substring(0,5));
user.setPassword(CommunityUtil.md5(user.getPassword()+user.getSalt()));
user.setType(0);
user.setStatus(0);
user.setActivationCode(CommunityUtil.generateUUID());
user.setHeaderUrl(String.format("https://images.nowcoder.com/head/%dt.png",new Random().nextInt(100)));
user.setCreateTime(new Date());
userMapper.insertUser(user);
//发送激活邮件
Context context = new Context();
context.setVariable("email",user.getEmail());
//规定url路径
//http://localhost:8080/community/activation/userId/code
String url = domain+contextPath+"/activation/"+user.getId()+"/"+user.getActivationCode();
context.setVariable("url",url);
String content = templateEngine.process("/mail/activation",context);
mailClient.sendMail(user.getEmail(),"激活账户",content);
return map;
}
这里面service层调用了DAO层中的方法,先判断数据的合法性,然后把传进来的数据倒入到数据库中,最后返回的map,用于前面controller层中判断本次注册是否成功。