output/JSP

게시판 만들기 6강 회원가입 기능 구현

hs_developer 2022. 6. 28. 21:24

한 명의 회원 정보를 입력하는 회원가입 폼에서 아이디, 비밀번호, 이름, 성별, 이메일을 입력해서 회원가입 버튼을 누르면 실제로 데이터베이스에 회원정보가 전송되는 과정이다.

 

 


 

join 메서드

'UserDAO' 클래스에서 회원가입 기능을 담당하는 'join' 메서드를 추가한다.

 

// 회원가입 영역
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();
    } 
    catch(Exception ex)
    {
        ex.printStackTrace();
    }
    return -1;
}

 

public int join(User user) - 'User' 클래스 인스턴스를 생성 해 한 명의 회원 정보를 담는다.
insert into user values(?, ?, ?, ?, ?); 'user' 테이블에 테이터를 입력하는 쿼리문
pstmt = conn.prepareStatement(sql); 'sql' 쿼리문을 대기 시킴
pstmt.setString(1, user.getUserID()); '1'번째 물음표에 실제 사용자가 입력한 'UserID'를 세팅
pstmt.executeUpdate(); 실제 DB에서 'insert'를 정상적으로 입력하면 'Query 1 OK'라고 뜨는데 그 숫자를 받아온다. 따라서 데이터가 정상적으로 입력되었다면 1 이상의 숫자가 리턴 된다.

 

 


joinAction.jsp

<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" />

'loginAction.jsp' 페이지에서는 로그인 시 필요한 아이디와 비밀번호만 받아오면 됐었지만, 'joinAction.jsp' 페이지에서는 회원가입 페이지에서 받아오는 데이터를 다 받아와야 하기 때문에 회원 정보 요소를 모두 추가한다.

 

 

<%@ 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"); %> <!-- 건너오는 모든 데이터를 UTF-8으로 변환한다 -->
<jsp:useBean id="user" class="user.User" scope="page" /> <!-- 현재 페이지에서만 자바 빈지 사용 -->
<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" />

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP 게시판 웹 사이트</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("alert('회원가입 성공')");
				script.println("history.back()");
				script.println("</script>");
			}
			
		}
	%>
</body>
</html>

 

입력이 다 되었어도 아이디가 중복 되면 다시 이전 페이지로 돌아가게 로직 추가 한다. 우리가 테이블을 작성할 때 'UserID' 'primary key'로 설정 했기 때문에 중복되지 않는 하나만 고유 키가 된다. 실제 사용자가 입력한 정보가 이미 존재하는 아이디를 입력하면 '-1'이 반환 된다.

 

모든 정보가 바르게 입력 되었다면 '1'이상이 반환되고 '회원 가입 성공' 알림 창이 뜨며 'main.jsp' 페이지로 이동한다.

 

 

 


 

기능 테스트

 

 

 

 

mysql> select * from user;
+---------+--------------+----------+------------+-------------------+
| userID  | userPassword | userName | userGender | userEmail         |
+---------+--------------+----------+------------+-------------------+
| aa      | 1234         | aa       | 남자       | aa@aa.com         |
| dd      | 1234         | dd       | 남자       | dd@dd.com         |
| gildong | 1234         | 홍길동   | 남자       | gildong@naver.com |
+---------+--------------+----------+------------+-------------------+
3 rows in set (0.00 sec)

 

DB에도 성공적으로 추가 됨.