day03-功能实现02

家居网购项目实现02

5.功能04-会员登录

5.1需求分析/图解

需求如图:

day03-功能实现02插图 day03-功能实现02插图1

  1. 输入用户名、密码后提交
  2. 判断该用户是否存在
  3. 如果存在,显示登录成功页面
  4. 否则返回登录页面,要求重新登录
  5. 要求改进登录密码为md5加密

5.2思路分析

day03-功能实现02插图2

5.3代码实现

根据上述分析图,在对应的层添加方法

5.3.1dao层

  1. 修改MemberDAO接口,声明queryMemberByUsernameAndPassword()方法

    //提供一个通过用户名和密码返回对应的Member的方法
    public Member queryMemberByUsernameAndPassword(String username,String password);
    
  2. 修改MemberDAOImpl实现类,实现queryMemberByUsernameAndPassword()方法

    /**
     * 通过用户名和密码返回对应的Member对象
     *
     * @param username 用户名
     * @param password 密码
     * @return 返回值为对应的Member对象,如果不存在则返回null
     */
    @Override
    public Member queryMemberByUsernameAndPassword(String username, String password) {
        String sql = "SELECT * FROM member WHERE username=? AND password=MD5(?);";
        return querySingle(sql, Member.class, username, password);
    }
    
  3. 在utils包中的MemberDAOImplTest类中增加测试方法

    @Test
    public void queryMemberByUsernameAndPassword() {
        Member member = memberDAO.queryMemberByUsernameAndPassword
                ("king", "king");
        System.out.println("member=" + member);
    }
    

    day03-功能实现02插图3
    代码测试通过

5.3.2service层

  1. 修改MemberService接口,声明login方法

    //登录用户
    //相比于直接传递用户名和密码,传递一个Member对象拓展性会比较好一些
    public Member login(Member member);
    
  2. 修改MemberServiceImpl接口实现类,实现login方法

    /**
     * 根据登录传入的member信息,返回对应的在数据库中的member对象
     *
     * @param member
     * @return 返回的是数据库中的member对象,若不存在则返回null
     */
    @Override
    public Member login(Member member) {
        return memberDAO.queryMemberByUsernameAndPassword
                (member.getUsername(), member.getPassword());
    }
    
  3. 在utils包中的MemberServiceImplTest类中增加测试方法

    @Test
    public void login() {
        Member member = memberService.login
                (new Member(null, "admin", "admin", null));
        System.out.println("member=" + member);
    }
    

    day03-功能实现02插图4
    代码测试通过

5.3.3web层

  1. 配置loginServlet

    
        LoginServlet
        com.li.furns.web.LoginServlet
    
    
        LoginServlet
        /loginServlet
    
    
  2. 创建LoginServlet

    package com.li.furns.web;
    
    import com.li.furns.entity.Member;
    import com.li.furns.service.MemberService;
    import com.li.furns.service.impl.MemberServiceImpl;
    
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.IOException;
    
    public class LoginServlet extends HttpServlet {
        private MemberService memberService = new MemberServiceImpl();
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doPost(request, response);
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //1.接收用户名和密码
            //如果前端输入的是null,后台接收的数据为空串""
            String username = request.getParameter("username");
            String password = request.getParameter("password");
    
            //构建一个member对象
            Member member = new Member(null, username, password, null);
            //2.调用MemberServiceImpl的login方法
            if (memberService.login(member) == null) {//数据库中没有该用户,返回登录页面
                //注意路径
                request.getRequestDispatcher("/views/member/login.html")
                        .forward(request, response);
            } else {
                //否则,跳转到登录成功页面
                request.getRequestDispatcher("/views/member/login_ok.html")
                        .forward(request, response);
            }
        }
    }
    

5.4完成测试

day03-功能实现02插图5
day03-功能实现02插图6

6.功能05-登录错误提示,表单回显

6.1需求分析/图解

day03-功能实现02插图7

  1. 输入用户名,密码后提交
  2. 如果输入有误,则给出提示
  3. 在登录表单回显用户名

6.2思路分析

在5.2分析图的基础上修改如下两处:
day03-功能实现02插图8

6.3代码实现

6.3.1web层

  1. 修改LoginServlet,将错误提示和用户名放入request域中

    package com.li.furns.web;
    
    import com.li.furns.entity.Member;
    import com.li.furns.service.MemberService;
    import com.li.furns.service.impl.MemberServiceImpl;
    
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.IOException;
    
    public class LoginServlet extends HttpServlet {
        private MemberService memberService = new MemberServiceImpl();
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doPost(request, response);
        }
    
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //1.接收用户名和密码
            //如果前端输入的是null,后台接收的数据为空串""
            String username = request.getParameter("username");
            String password = request.getParameter("password");
    
            //构建一个member对象
            Member member = new Member(null, username, password, null);
    
            //2.调用MemberServiceImpl的login方法
            if (memberService.login(member) == null) {//数据库中没有该用户,返回登录页面
                //登录失败,将错误信息和登录会员名放入request域中
                request.setAttribute("errInfo", "登录失败,用户名或者密码错误");
                request.setAttribute("username", username);
                //注意路径
                request.getRequestDispatcher("/views/member/login.jsp")
                        .forward(request, response);
            } else {
                //否则,跳转到登录成功页面
                request.getRequestDispatcher("/views/member/login_ok.html")
                        .forward(request, response);
            }
        }
    }
    
  2. 将login.html改为login.jsp(文件右键Refactor-->Rename,在弹窗中点击Do Refactor,会把其他文件引用login.html的信息自动改为login.jsp)

    部分代码,详细代码请看 https://github.com/liyuelian/furniture_mall.git

    
    
            

posted @
2022-12-16 23:34 
一刀一个小西瓜 
阅读(17
评论(0
编辑 
收藏 
举报

文章来源于互联网:day03-功能实现02

THE END
分享
二维码