家居网购项目实现02
5.功能04-会员登录
5.1需求分析/图解
需求如图:
- 输入用户名、密码后提交
- 判断该用户是否存在
- 如果存在,显示登录成功页面
- 否则返回登录页面,要求重新登录
- 要求改进登录密码为md5加密
5.2思路分析
5.3代码实现
根据上述分析图,在对应的层添加方法
5.3.1dao层
-
修改MemberDAO接口,声明queryMemberByUsernameAndPassword()方法
//提供一个通过用户名和密码返回对应的Member的方法 public Member queryMemberByUsernameAndPassword(String username,String password);
-
修改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); }
-
在utils包中的MemberDAOImplTest类中增加测试方法
@Test public void queryMemberByUsernameAndPassword() { Member member = memberDAO.queryMemberByUsernameAndPassword ("king", "king"); System.out.println("member=" + member); }
代码测试通过
5.3.2service层
-
修改MemberService接口,声明login方法
//登录用户 //相比于直接传递用户名和密码,传递一个Member对象拓展性会比较好一些 public Member login(Member member);
-
修改MemberServiceImpl接口实现类,实现login方法
/** * 根据登录传入的member信息,返回对应的在数据库中的member对象 * * @param member * @return 返回的是数据库中的member对象,若不存在则返回null */ @Override public Member login(Member member) { return memberDAO.queryMemberByUsernameAndPassword (member.getUsername(), member.getPassword()); }
-
在utils包中的MemberServiceImplTest类中增加测试方法
@Test public void login() { Member member = memberService.login (new Member(null, "admin", "admin", null)); System.out.println("member=" + member); }
代码测试通过
5.3.3web层
-
配置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>
-
创建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