详细流程:
1乱码处理(Servlet)
//1 乱码处理
req.setCharacterEncoding(StandardCharsets.UTF_8.toString());
resp.setCharacterEncoding(StandardCharsets.UTF_8.toString());
2 得到前端数据(Servlet)
//2 得到前端数据
String name = req.getParameter("name");
String password = req.getParameter("password");
String code = req.getParameter("code");
String sessionCode = String.valueOf(req.getSession().getAttribute("vCode"));
3封装到VO(Servlet)
//3 封装到model
UserVO userVO = UserVO.builder()
.name(name)
.password(password)
.code(code)
.sessionCode(sessionCode)
.build();
4逻辑判断(用接口的形式)(Servlet)
UserService userService = new UserServiceImpl();
5创建类返回DTO(Service)
//5 传入将前端VO的数据进行判断,判断后将结果存入DTO
public ResultDTO login(UserVO userVO) {
ResultDTO resultDTO = new ResultDTO();
6验证密码(Service)
//6 判断前端传来的验证码是否正确
if (userVO.getCode().equals(userVO.getSessionCode())) {
UserModel userModel = new UserModel();
7加密密码(Service)
//7 将VO对象转换为Model对象,以便加密密码
userModel = ObjCopy.copy(userVO, UserModel.class);
String up = userModel.getPassword();
String down = Md5.encoderByMd5(up);
userModel.setPassword(down);
8传入Dao层与数据库比对(Service)
//8 加密密码后,将Model传入Dao层进行数据比对
UserDao userDao = new UserDaoImpl();
UserModel model = userDao.findByUsernameAndPassword(userModel);
9拼接sql语句,在数据库进行操作,得到返回的结果集(Dao)
//9 拼接sql语句,将从model得到的用户名密码当作变量进行拼接,使其可以在数据库中找到
String sql = "select * from user where name='" + userModel.getName() + "' and password='" + userModel.getPassword() + "'";
ResultSet query = JDBC.query(sql);
10重置model使其非空(Dao)
//10 重置Model,然后将在数据库中找到的数据进行赋值
UserModel model = null;
try {
while (query.next()) {
model = new UserModel();
}
} catch (SQLException e) {
e.printStackTrace();
}
return model;
}
11根据返回的结果判断(Service)
//11 若数据库中有匹配到的对象,传来的就是此对象,若没有对象传来的就是null
//然后根据model的状态来返回最终结果
if (model != null) {
resultDTO.setCode(1);
resultDTO.setMsg("success");
} else {
resultDTO.setCode(0);
resultDTO.setMsg("error");
}
} else {
resultDTO.setCode(-1);
resultDTO.setMsg("error-code");
}
return resultDTO;
12得到返回值(Servlet)
//12 得到服务逻辑层的返回值
ResultDTO obj = userService.login(userVO);
3将结果返回给前端(Servlet)
//13 将结果返回给web前端
resp.getWriter().println(JSONObject.toJSONString(obj));