从登录界面进入主界面要进行用户名和密码的验证,首先,前台通过form表单的提交
在后台获取用户名和密码以及mothod:
String method = req.getParameter("method"); if(method.equals("getjsp")){ req.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(req, resp); }else if(method.equals("login")){ login(); }
在login()方法中实现对登录用户的校验:
private void login(){ try { String loginName = request.getParameter("loginName"); String password = request.getParameter("passWord"); Mapresult = shopService.login(loginName, password); if(result.get("code").equals(0)){ //登录成功//跳转到主界面 User user = (User) result.get("msg"); request.setAttribute(Constants.USER_SESSION, user); //请求跳转到主界面的Servlet response.sendRedirect(request.getContextPath()+"/list?method=getAll"); //request.getRequestDispatcher("/WEB-INF/jsp/list.jsp").forward(request, response); }else{ //登录失败 String msg = (String) result.get("msg"); request.setAttribute("msg", msg); request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response); } } catch (ServletException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
在shopService.login(loginName, password);方法进行判断,首先在接口中定义方法:
然后进入实现类:
首先在这里得到数据访问层对象,然后调用login方法:
public Maplogin(String loginName, String password) { Map results = new HashMap (); //判断参数是否为空 if(StringUtils.isEmpty(loginName) || StringUtils.isEmpty(password)){ //参数为空 results.put("code", 1); results.put("msg", "参数为空了"); }else{ //根据用户名查询用户对象 User user = userMapper.login(loginName); if(user != null){ //判断密码 if(user.getPassword().equals(password)){ //登录成功 //应该将登录成功的用户存入到Session会话中 results.put("code", 0); results.put("msg", user); }else{ //登录失败 results.put("code", 2); results.put("msg", "密码错误了"); } }else{ //登录名不存在 results.put("code", 3); results.put("msg", "登录名不存在"); } } return results; }
首先利用StringUtils.isEmpty()方法判断传递过来参数是否为空,如果不为空则调用userMapper中的login方法
在这里调用数据库语句,根据用户名获取user然后返回业务层,再根据user中的密码比对用户输入的密码是否相同,将结果放入Map类型的result中,然后在LoginServlet中读取result中的内容:
如果结果中的code为0,代表数据库中的用户名和密码匹配,用户登录成功,然后跳转到主界面。