회원데이터를 모델링 하려한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | package user; public class UserDTO { private String userID; private String userPassword; private String userEmail; private String userEmailHash; private boolean userEmailChecked; public String getUserID() { return userID; } public void setUserID(String userID) { this.userID = userID; } public String getUserPassword() { return userPassword; } public void setUserPassword(String userPassword) { this.userPassword = userPassword; } public String getUserEmail() { return userEmail; } public void setUserEmail(String userEmail) { this.userEmail = userEmail; } public String getUserEmailHash() { return userEmailHash; } public void setUserEmailHash(String userEmailHash) { this.userEmailHash = userEmailHash; } public boolean isUserEmailChecked() { return userEmailChecked; } public void setUserEmailChecked(boolean userEmailChecked) { this.userEmailChecked = userEmailChecked; } public UserDTO() { } public UserDTO(String userID, String userPassword, String userEmail, String userEmailHash, boolean userEmailChecked) { super(); this.userID = userID; this.userPassword = userPassword; this.userEmail = userEmail; this.userEmailHash = userEmailHash; this.userEmailChecked = userEmailChecked; } } | cs |
위의 내용은 쉽게 말해 초기화 해주는 코드이다.
우리의 데이터베이스에 접근해서 현재 접근된 객체를 반환하는 코드이다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | package user; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class UserDAO { private Connection conn; private ResultSet rs; public UserDAO() { try { String dbURL = "jdbc:mysql://localhost:3306/LectureEvaluation"; String dbID = "root"; String dbPassword = "root1234"; Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(dbURL, dbID, dbPassword); } catch (Exception e) { e.printStackTrace(); } } public int login(String userID, String userPassword) { String SQL = "SELECT userPassword FROM USER WHERE userID = ?"; try { PreparedStatement pstmt = conn.prepareStatement(SQL); pstmt.setString(1, userID); rs = pstmt.executeQuery(); if(rs.next()) { if(rs.getString(1).equals(userPassword)) return 1; // 로그인 성공 else return 0; // 비밀번호 틀림 } return -1; // 아이디 없음 } catch (SQLException e) { e.printStackTrace(); } return -2; // 데이터베이스 오류 } public int join(UserDTO user) { String SQL = "INSERT INTO USER VALUES (?, ?, ?, ?, false)"; try { PreparedStatement pstmt = conn.prepareStatement(SQL); pstmt.setString(1, user.getUserID()); pstmt.setString(2, user.getUserPassword()); pstmt.setString(3, user.getUserEmail()); pstmt.setString(4, user.getUserEmailHash()); return pstmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } return -1; // 회원가입 실패 } public String getUserEmail(String userID) { String SQL = "SELECT userEmail FROM USER WHERE userID = ?"; try { PreparedStatement pstmt = conn.prepareStatement(SQL); pstmt.setString(1, userID); rs = pstmt.executeQuery(); while(rs.next()) { return rs.getString(1); // 이메일 주소 반환 } } catch (SQLException e) { e.printStackTrace(); } return null; // 데이터베이스 오류 } public boolean getUserEmailChecked(String userID) { String SQL = "SELECT userEmailChecked FROM USER WHERE userID = ?"; try { PreparedStatement pstmt = conn.prepareStatement(SQL); pstmt.setString(1, userID); rs = pstmt.executeQuery(); while(rs.next()) { return rs.getBoolean(1); // 이메일 등록 여부 반환 } } catch (SQLException e) { e.printStackTrace(); } return false; // 데이터베이스 오류 } public boolean setUserEmailChecked(String userID) { String SQL = "UPDATE USER SET userEmailChecked = true WHERE userID = ?"; try { PreparedStatement pstmt = conn.prepareStatement(SQL); pstmt.setString(1, userID); pstmt.executeUpdate(); return true; // 이메일 등록 설정 성공 } catch (SQLException e) { e.printStackTrace(); } return false; // 이메일 등록 설정 실패 } } | cs |
다음으로는 userRegisterAction을 만들어 보자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="user.UserDTO"%> <%@ page import="user.UserDAO"%> <%@ page import="util.SHA256"%> <%@ page import="java.io.PrintWriter"%> <% request.setCharacterEncoding("UTF-8"); String userID = null; String userPassword = null; String userEmail = null; if(request.getParameter("userID") != null) { userID = (String) request.getParameter("userID"); } if(request.getParameter("userPassword") != null) { userPassword = (String) request.getParameter("userPassword"); } if(request.getParameter("userEmail") != null) { userEmail = (String) request.getParameter("userEmail"); } if (userID == null || userPassword == null || userEmail == null) { PrintWriter script = response.getWriter(); script.println("<script>"); script.println("alert('입력이 안 된 사항이 있습니다.');"); script.println("history.back();"); script.println("</script>"); script.close(); } else { UserDAO userDAO = new UserDAO(); int result = userDAO.join(new UserDTO(userID, userPassword, userEmail, SHA256.getSHA256(userEmail), false)); if (result == -1) { PrintWriter script = response.getWriter(); script.println("<script>"); script.println("alert('이미 존재하는 아이디입니다.');"); script.println("history.back();"); script.println("</script>"); script.close(); } else { session.setAttribute("userID", userID); PrintWriter script = response.getWriter(); script.println("<script>"); script.println("location.href = 'emailSendAction.jsp';"); script.println("</script>"); script.close(); } } %> | cs |
이후 비어있는 데이터베이스의 회원을 채워넣어보도록 하자
.
.
.
.
현재 이 창에서 벗어나고 있지 못하고 있다.... 너무 오랫동안 해결이 안되서 방법을 찾는다면 다음글에서 이어서 작성을 이어나가 보려 한다.