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에도 성공적으로 추가 됨.