JSP
2021-09-09(게시판 - 로그인 기능)
BSYeop
2021. 9. 9. 21:42
로그인 기능을 작성하는 과정에서 끝내 성공하긴 했지만 LoginCmd에서 try catch문을 사용하지 않아 나는 에러를 찾지 못해 시간을 소비했다. try catch문(예외 처리)의 사용 이유를 다시 공부하도록 하자.
1. 로그인 위한 MariaDB에 Member 테이블 추가
1.1 로그인 테스트 위한 데이터 삽입
2. MemberDTO
- DB에서 Member 테이블의 컬럼과 row를 정의함
package kr.ac.daegu.jspmvc.model;
public class MemberDTO {
private int mid; // 회원 번호
private String id; // 회원 아이디
private String password; // 회원 비밀번호
public int getMid() {
return mid;
}
public void setMid(int mid) {
this.mid = mid;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
3. MemberDAOdb에 접속
- db에 접속해서 쿼리를 날리고 결과를 리턴하는 객체
package kr.ac.daegu.jspmvc.model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MemberDAO {
public MemberDTO getLoginData(String id) throws ClassNotFoundException, SQLException {
// db에 접속해서
Connection conn = DBConnection.getConnection();
PreparedStatement pstmt = null;
ResultSet rs = null;
// 쿼리 실행시키고
pstmt = conn.prepareStatement("select * from member where id = ?");
pstmt.setString(1, id);
rs = pstmt.executeQuery();
// 반환 데이터를 리턴.
MemberDTO memData = new MemberDTO();
if(rs.next()){
//String id = rs.getString("id");
String password = rs.getString("password");
memData.setId(id);
memData.setPassword(password);
}
return memData;
}
}
4. LoginCmd
- 사용자(EndUser)가 입력한 id값으로 로그인 정보를 가져와 입력한 password와 DB의 password가 일치할시 true를 리턴, 틀렸을 경우 false 리턴
package kr.ac.daegu.jspmvc.biz;
import kr.ac.daegu.jspmvc.model.MemberDAO;
import kr.ac.daegu.jspmvc.model.MemberDTO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.SQLException;
public class LoginCmd implements BoardCmd {
@Override
public boolean execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String id = request.getParameter("id");
String password = request.getParameter("password");
System.out.println("id = " + id);
System.out.println("password = " + password);
// DAO
MemberDAO memDAO = new MemberDAO();
try {
// id 기준으로 로그인 정보를 가져옴.
MemberDTO member = memDAO.getLoginData(id);
// 비밀번호 매칭
return isPasswordMatch(password, member.getPassword());
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
return false;
}
private boolean isPasswordMatch(String inputPassword, String dbPassword) {
return inputPassword.equals(dbPassword);
}
}
4. index.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>JSP - Hello World</title>
</head>
<body>
<form action="login.bbs" method="post">
<table>
<tr>
<td><label for="id">아이디</label></td>
<td><input type="text" name="id" id="id"/></td>
</tr>
<tr>
<td><label for="password">비번</label></td>
<td><input type="text" name="password" id="password"/></td>
</tr>
<tr>
<input type="submit" value="로그인"/>
</tr>
</table>
</form>
</body>
</html>