자바 개발 23일차 - 강의평가 웹 사이트 만들기(3)

김경빈·2023년 1월 5일
0

회원데이터를 모델링 하려한다.

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

사실 이 DAO는 잘못 설계된 소스코드입니다. 현재 작성한 DAO 같은 경우는 접속자가 많은 경우 데이터베이스 연결 갯수 초과 오류가 뜰 수 있습니다. 원래는 conn 객체를 매 함수마다 새롭게 초기화주거나, 데이터베이스 커넥션 풀을 사용하는 방식으로 문제를 해결하는 방법이 있습니다.

다음으로는 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

이후 비어있는 데이터베이스의 회원을 채워넣어보도록 하자


.
.
.
.

현재 이 창에서 벗어나고 있지 못하고 있다.... 너무 오랫동안 해결이 안되서 방법을 찾는다면 다음글에서 이어서 작성을 이어나가 보려 한다.

profile
매일매일 무한한 근성으로 코드를 작성합니다.

0개의 댓글