KEEP GOING

JSP 게시판 만들기 - (6) 회원가입 기능 구현 본문

web

JSP 게시판 만들기 - (6) 회원가입 기능 구현

jmHan 2022. 5. 26. 19:44
반응형

1. userDAO.java 기능 추가

앞서 jdbc로 DB 연결과 로그인 로직을 처리하던 UserDAO.java에

회원 가입 기능을 수행하는 메소드를 추가적으로 구현하고자 합니다.

 

User 클래스 인스턴스를 매개변수로 받는 join 메소드를 클래스 내부에 구현해주면 됩니다.

 

[userDAO.java]

package user;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class UserDAO {
	private Connection conn;
	private PreparedStatement pstmt;
	private ResultSet rs; 
	
	public UserDAO() {
		try {
			String dbURL = "jdbc:mysql://localhost:3306/BBS";
			String dbID = "root";
			String dbPassword = "aa1277aa!";
			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 {
			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(Exception e) {
			e.printStackTrace();
			
		}
		return -2; //DB 오류 
	}
	
	public int join(User user) {
		String SQL = "INSERT INTO USER VALUES(?, ?, ?, ?, ?)";
		try {
			pstmt = conn.prepareStatement(SQL);
			pstmt.setString(1, user.getUserID());
			pstmt.setString(2, user.getUserPassword());
			pstmt.setString(3, user.getUserName());
			pstmt.setString(4, user.getUserGender());
			pstmt.setString(5, user.getUserEmail());
			return pstmt.executeUpdate(); // 0이상 값이 return된 경우 성공 
		}catch(Exception e) {
			e.printStackTrace();
			
		}
		return -1; //DB 오류 
	}
}

 

2. joinAction.jsp 구현 

join.jsp에서 회원 가입 폼 입력시 출력되는 페이지입니다.

 

[joinAction.java]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import = "user.UserDAO" %>
<%@ page import = "java.io.PrintWriter" %>
<% request.setCharacterEncoding("UTF-8"); %>
 
<jsp:useBean id="user" class="user.User" scope="page"></jsp:useBean>
<jsp:setProperty name="user" property="userID"/>
<jsp:setProperty name="user" property="userPassword"/>
<jsp:setProperty name="user" property="userName"/>
<jsp:setProperty name="user" property="userGender"/>
<jsp:setProperty name="user" property="userEmail"/>
 
<head>
<meta http-equiv="Content-Type" content="text/html; c harset=UTF-8">
<title>JSP BBS</title>
</head>
<body>
    <%
    	if (user.getUserID() == null || user.getUserPassword() == null || user.getUserName() == null 
    		|| user.getUserGender() == null || user.getUserEmail() == null){
    		PrintWriter script = response.getWriter();
            script.println("<script>");
            script.println("alert('모든 문항을 입력해주세요.')");
            script.println("history.back()");    // 이전 페이지로 사용자를 보냄
            script.println("</script>");
    	}else{
    		UserDAO userDAO = new UserDAO();
            int result = userDAO.join(user);
            if (result == -1){ // 회원가입 실패시
                PrintWriter script = response.getWriter();
                script.println("<script>");
                script.println("alert('이미 존재하는 아이디입니다.')");
                script.println("history.back()");    // 이전 페이지로 사용자를 보냄
                script.println("</script>");
            }else{ // 회원가입 성공시
                PrintWriter script = response.getWriter();
                script.println("<script>");
                script.println("location.href = 'main.jsp'");    // 메인 페이지로 이동
                script.println("</script>");
            }
    	}
    %>
 
</body>
</html>

 

join 페이지에서 하나라도 입력폼에서 입력되지 않는 경우, 데이터베이스에 등록할 수 없습니다. 

해당 로직을 처리하기 위해 

 

if (user.getUserID() == null || user.getUserPassword() == null || user.getUserName() == null 
     || user.getUserGender() == null || user.getUserEmail() == null){
     PrintWriter script = response.getWriter();
            script.println("<script>");
            script.println("alert('모든 문항을 입력해주세요.')");
            script.println("history.back()");    // 이전 페이지로 사용자를 보냄
            script.println("</script>");

}

 

와 같은 코드를 넣어줍니다. 

 

 

또한 데이터베이스 테이블에서 아이디값은 PRIMARY KEY로 중복이 허용되지 않습니다.

만약 이미 데이터베이스에 존재하는 ID로 회원가입을 한 경우 오류가 발생하여 result 변수에는 -1 값이 들어가게 됩니다.

따라서 이러한 경우에는 이미 존재하는 아이디라는 경고창을 띄워주고 이전 페이지로 돌아갑니다.

 

 

3. 서버 실행

회원가입 화면으로 이동 > 입력 폼 작성

[성공적으로 회원가입이 이루어진 경우]

경고창 없이 메인 페이지(main.jsp)로 이동되었습니다.

이전 데이터베이스 테이블 조회
성공적으로 회원가입 후 데이터베이스 테이블 조회

마찬가지로 mysql 내 데이터베이스 테이블에도 성공적으로 값이 잘 들어왔습니다.

 

 

[입력이 덜 된 경우]

 

[이미 존재하는 아이디를 입력한 경우]

반응형
Comments