设为首页 加入收藏

TOP

day03-功能实现02(一)
2023-07-25 21:38:21 】 浏览:48
Tags:day03- 能实现

家居网购项目实现02

5.功能04-会员登录

5.1需求分析/图解

需求如图:

image-20221216165739849 image-20221216165757967

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

5.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);
    }
    
    image-20221216183533442

    代码测试通过

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);
    }
    
    image-20221216185341949

    代码测试通过

5.3.3web层

  1. 配置loginServlet

    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.li.furns.web.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/loginServlet</url-pattern>
    </servlet-mapping>
    
  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
首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇docker高级篇1-dockeran安装mysql.. 下一篇每日算法之把数字翻译成字符串

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目