[JSP] 회원가입

박은지·2022년 3월 7일
0

회원가입 페이지

join.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<!-- HEAD -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width" initial-scale="1">
<link rel="stylesheet" href="css/bootstrap.css">
<title>JSP 게시판 웹 사이트</title>
</head>
<!-- BODY -->
<body>
    <!-- 네비게이션바 -->
	<nav class="navbar navbar-default">
		<div class="navbar-header">
			<button type="button" class="navbar-toggle collapsed"
				data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
				aria-expanded="false">
				<span class="icon-bar"></span>
				<span class="icon-bar"></span>
				<span class="icon-bar"></span>
			</button>
			<a class="navbar-brand" href="main.jsp">JSP 게시판 웹 사이트</a>
		</div>
		<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
			<ul class="nav navbar-nav">
				<li><a href="main.jsp">메인</a></li>
				<li><a href="bbs.jsp">게시판</a></li>
			</ul>
			<ul class="nav navbar-nav navbar-right">
				<li class="dropdown">
					<a href="#" class="dropdown-toggle"
						data-toggle="dropdown" role="button" aria-haspopup="true"
						aria-expanded="false">접속하기<span class="caret"></span></a>
					<ul class="dropdown-menu">
						<li><a href="login.jsp">로그인</a></li>
						<li class="active"><a href="join.jsp">회원가입</a></li>
					</ul>
				</li>
				
			</ul>
		</div>
	</nav>
	
	<!-- 회원가입 양식 -->
	<div class="container">
		<div class="col-lg-4"></div>
		<div class="col-lg-4">
			<div class="jumbotron" style="padding-top: 20px;">
				<form method="post" action="joinAction.jsp">
					<h3 style="text-align: center;">회원가입 화면</h3>
					<div class="form-group">
						<input type="text" class="form-control" placeholder="아이디" name="userID" maxlength="20">
					</div>
					<div class="form-group">
						<input type="password" class="form-control" placeholder="비밀번호" name="userPassword" maxlength="20">
					</div>
					<div class="form-group">
						<input type="text" class="form-control" placeholder="이름" name="userName" maxlength="20">
					</div>
					<div class="form-group" style="text-align: center;">
						<div class="btn-group" data-toggle="buttons">
							<label class="btn btn-primary active">
								<input type="radio" name="userGender" autocomplete="off" value="남자" checked>남자
							</label>
							<label class="btn btn-primary">
								<input type="radio" name="userGender" autocomplete="off" value="여자" checked>여자
							</label>
						</div>
					</div>
					<div class="form-group">
						<input type="email" class="form-control" placeholder="이메일" name="userEmail" maxlength="50">
					</div>
					<input type="submit" class="btn btn-primary form-control" value="회원가입">
				</form>
			</div>
		</div>
		<div class="col-lg-4"></div>
	</div>

	<!-- Script -->
	<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
	<script src="js/bootstrap.js"></script>
</body>
</html>

회원가입 기능

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;
	
	
	// ----------- MySQL 접속 ----------- //
	// UserDAO : 데이터 접근 객체
	public UserDAO() {
		// try-catch 예외처리
		try {
			// localhost:3306 은 MySQL 서버 자체를 의미하고, BBS는 데이터베이스
			String dbURL = "jdbc:mysql://localhost:3306/BBS";
			String dbID = "root";
			String dbPassword = "root";
			
			// mysql Driver 찾기
			// Driver : mysql에 접속할 수 있도록 매개체 역할을 하는 하나의 라이브러리
			Class.forName("com.mysql.jdbc.Driver");
			
			// dbURL에 dbID, dbPassword로 접속
			// 접속이 완료되면 conn 객체 안에 접속된 정보가 담기게 되는 것!
			conn = DriverManager.getConnection(dbURL, dbID, dbPassword);
			
		} catch (Exception e) {
			e.printStackTrace(); // 어떤 오류인지 출력
		}
	}
	
	
	// ----------- 로그인 ----------- //
	// 이 로그인 기능이 호출되는 페이지가 바로 loginAction.jsp
	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; // '데이터베이스 오류'
	}
	
	
	// --------- 회원가입 --------- //
	public int join(User user) {
		String SQL ="INSERT INTO USER VALUES(?, ?, ?, ?, ?)";
		
		try {
			// 차례대로 ID, Password, Name, Gender, Email 
			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 e) {
			// Error
			e.printStackTrace(); // 어떤 오류인지 출력
		}
	    return -1 ; // '데이터베이스 오류' : INSERT를 실행할 경우 0이상의 숫자를 반환하기 때문에 -1이면 Error
	
	}

}

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"); %>

<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 -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<!-- BODY -->
<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) {  // 동일한 ID를 입력했을 경우 데이터베이스에서 오류 발생 (userID는 고유한 기본키 PK)
	    		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>

0개의 댓글