黑马旅游网-学习笔记Part05

YangeIT大约 4 分钟旅游项目Mysql

黑马旅游网-学习笔记Part05

今日目标

  • 邮件激活功能 🍐 ❤️
  • 用户登录✏️
  • 注销功能

前置知识

  1. 曾经发送过邮件或者知道邮件是什么?
  2. 完成过mybatis的入门案例
  3. 已经导入了旅游网的初始项目工程
  4. 理解cookie和session的作用和特点
  5. 听说过JWT令牌进制

1. 邮件激活功能

2. 用户登录

用户登录

image
image

代码操作

步骤

  1. 书写Servlet接受请求和参数,处理交互逻辑
  2. 书写Service业务层代码,判断密码和用户名是否正确逻辑
  3. 书写Mapper代码,查询下数据库

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1.验证验证码
        //获取表单提交过来的 验证码,以及获取session 域中的code
        String check = req.getParameter("check");
        //从域中拿到对应的验证码  通过key获取vuale
        String checkcode_server = (String) req.getSession().getAttribute("CHECKCODE_SERVER");
        //创建一个封装结果集
        ResultInfo resultInfo = new ResultInfo();

        //判断验证码是否正确
        if (check == null || !check.equalsIgnoreCase(checkcode_server)) {
            //判断验证码错误 则设置为错误
            resultInfo.setFlag(false);
            resultInfo.setErrorMsg("验证码错误!!");
            //将实体类转化为 json数据串
            String jsonString = JSON.toJSONString(resultInfo);

            //设置响应头信息
            resp.setContentType("application/json;charset=utf-8");
            resp.getWriter().write(jsonString);
            return;
        }

        //2. 获取前端传递过来的参数  (username,password)

        //第二步获取前端传递过来的数据
        Map<String, String[]> userMap = req.getParameterMap();
        //创建user对象
        User user = new User();
        //java  有api 可以将map的数据和实体类进行直接绑定   第一个参数传实体类, 第二个参数放map
        try {
            BeanUtils.populate(user, userMap);

            System.out.println(user.toString());

        } catch (Exception e) {
            e.printStackTrace();
        }
        //3.调用service接口传入user对象
        UserService userService = new UserServiceImpl();
        User user1 = userService.findUser(user);
        //3.1 serviceImpl 需要对传入的数据做处理, 第一步加密密码 设置到user.password
        //3.2往数据库做 select 操作  查出来user == null 说明帐号密码错误,如果不为空则登录失败
        //4.判断响应结果 是否登录成功 并且给前端显示不同的数据
        //4.1 做用户是否激活判断, 如果 status= "Y" 就登录成功 如果 ="N" 就显示账户为激活 set.mag()
        if(user1 == null){
            resultInfo.setFlag(false);
            resultInfo.setErrorMsg("登录失败");
        }else if(user1.getStatus().equals("N")){
            System.out.println(user1.getStatus());
            resultInfo.setFlag(false);
            resultInfo.setErrorMsg("帐号未激活,请前往邮箱激活!");
        }else {
            resultInfo.setFlag(true);
            req.getSession().setAttribute("user",user1);

        }

        //将实体类转化为 json数据串
        String jsonString = JSON.toJSONString(resultInfo);

        //设置响应头信息
        resp.setContentType("application/json;charset=utf-8");
        resp.getWriter().write(jsonString);
        return;
    }


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}








 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 




 
 
 
 
 
 
 
 
 
 
 
 

 
 




 
 
 
 
 
 
 
 
 
 



 
 
 
 
 
 
 








3. 注销

前言

注销功能按钮
注销功能按钮

要点:点击退出后,清除Session中的user对象,并且重定向到登录页面

接口信息:

  • 请求方式:Get
  • 请求路径: /travel/exitServlet
  • 请求参数:无参数

代码操作

@WebServlet("/exitServlet")
public class ExitServlet extends HttpServlet {


    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//完成退出登录模块的接口逻辑
//     req.getSession().removeAttribute("user");
        req.getSession().invalidate();

//        跳转到登录页面,重定向登录页面
        resp.sendRedirect(req.getContextPath()+"/login.html");
    }


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}