欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

黑马旅游网学习笔记之登录和退出功能(三)

程序员文章站 2022-04-21 20:34:38
...

概述

(一)登录功能分析
(二)登录功能:Servlet的实现
(三)登录功能:Service&Dao的实现
(四)登录功能:前台页面的实现
(五)登录功能:姓名提示
(六)退出功能

(一)登录功能分析

注意:该登录页面的验证码功能就不重复做了
黑马旅游网学习笔记之登录和退出功能(三)

(二)登录功能:Servlet的实现

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取用户名和密码的数据
        Map<String, String[]> map = request.getParameterMap();
        //2.封装User对象
        User user = new User();
        try {
            BeanUtils.populate(user, map);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
        //3.调用service查询
        UserService service = new UserServiceImpl();
        User u = service.login(user);

        ResultInfo info = new ResultInfo();
        //4.判断用户对象是否为null
        if (u == null) {
            //用户名或密码错误
            info.setFlag(false);
            info.setErrorMsg("用户名或密码错误!");
        }
        //5.判断用户是否**
        if (u != null && !"Y".equals(u.getStatus())) {
            //用户尚未**
            info.setFlag(false);
            info.setErrorMsg("您尚未**,请**!");
        }
        //6.登录成功
        if (u != null && "Y".equals(u.getStatus())) {
            info.setFlag(true);
        }
        //响应数据
        ObjectMapper mapper = new ObjectMapper();
        response.setContentType("application/json;charset=utf-8");
        mapper.writeValue(response.getOutputStream(), info);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

(三)登录功能:Service&Dao的实现

UserService

    /**
     * 登录方法
     *
     * @param user
     * @return
     */
    User login(User user);

UserServiceImpl

    /**
     * 登录方法
     *
     * @param user
     * @return
     */
    @Override
    public User login(User user) {
        return userDao.findByUsernameAndPassword(user.getUsername(), user.getPassword());
    }

UserDao

    /**
     * 根据用户名和密码查询的方法
     *
     * @param username
     * @param password
     * @return
     */
    User findByUsernameAndPassword(String username, String password);

UserDaoImpl

    /**
     * 根据用户名和密码查询的方法
     *
     * @param username
     * @param password
     * @return
     */
    @Override
    public User findByUsernameAndPassword(String username, String password) {
        User user = null;
        try {
            //1.定义sql
            String sql = "select * from tab_user where username = ? and password = ?";
            //2.执行sql
            user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username, password);
        } catch (Exception e) {

        }

        return user;
    }

(四)登录功能:前台页面的实现

    <script>
        $(function () {
            //1.给登录按钮绑定单击事件
            $("#btn_sub").click(function () {
                //2.发送ajax请求,提交表单数据
                $.post("loginServlet", $("#loginForm").serialize(), function (data) {
                    //3.处理响应结果
                    if (data.flag) {
                        //登录成功
                        location.href = "index.html";
                    } else {
                        //登录失败
                        $("#errorMsg").html(data.msg);
                    }
                });
            });
        });
    </script>

(五)登录功能:姓名提示

可以看到登录成功后没有提示姓名
并且退出按钮没有变黑色、登录按钮没有变灰色(这个BUG稍后再解决)
黑马旅游网学习笔记之登录和退出功能(三)
header.html

<script>
    $(function () {
        $.get("findUserServlet", {}, function (data) {
            var msg = "欢迎回来," + data.name;
            $("#span_username").html(msg);
        });
    });
</script>

我们先在LoginServlet中把user对象存入session
黑马旅游网学习笔记之登录和退出功能(三)
FindUserServlet

@WebServlet("/findUserServlet")
public class FindUserServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //从session中获取登录用户
        Object user = request.getSession().getAttribute("user");
        //将user写回客户端
        ObjectMapper mapper = new ObjectMapper();
        response.setContentType("application/json;charset=utf-8");
        mapper.writeValue(response.getOutputStream(), user);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

(六)退出功能

什么叫做登录了?session中有user对象。
退出的实现步骤:

  1. 访问servlet,将session销毁
  2. 跳转到登录页面

代码实现:
黑马旅游网学习笔记之登录和退出功能(三)

@WebServlet("/exitServlet")
public class ExitServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("退出登录");
        //1.销毁session
        request.getSession().invalidate();

        //2.跳转到登录页面
        response.sendRedirect(request.getContextPath() + "/login.html");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}
相关标签: 黑马旅游网