JSP

JSP 무작정 해보기 - 회원가입

3년안에 내집 마련 2019. 11. 5. 00:21
반응형

저번 시간에  로그인 까지 구현을 하였다.

이번 시간에는 회원가입을 구현해 보도록 하겠다.

우선 회원가입 창을 만들어야 한다.

회원가입 창은 Login.jsp를 그대로 복사해 온 뒤 몇가지만 수정 해주면 된다.

1. 기본 틀

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>    

<!DOCTYPE html>
<html>
<head>
<meta http-equiv = "Content-type" content = "text/html"; charset="UTF-8">
<meta name = "viewport" content="width=device-width", inital-scale="1">  
<link rel="stylesheet" href="css/bootstrap.css"> 

<title>로그인 페이지</title>
</head>
<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-expended="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 mr-auto">
				<li class="nav-item active">
					<a class = "nav-link" href="Main.jsp">메인<span class = "sr-only">(current)</span></a></li>
				<li class="nav-item">
					<a class = "nav-link" href="Practice.jsp">게시판</a>
				</li>	
				<li class="nav-item">
					<a class = "nav-link" href="Practice.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 class="active"><a href="Login.jsp">로그인</a></li><!-- default로 적용되는 것은 로그인 -->
						<li><a href="Join.jsp">회원가입</a></li><!-- dropmenu 2 -->
						<li><a href="https://tkdrms568.tistory.com">내 블로그로 이동하기</a></li><!-- dropmenu 3 -->
					</ul>
				</li>
			</ul>
		</div>
	</nav>
	
		<div class="col-lg-10"></div>
		<div class="col-lg-10">
			<div class="jumbotron" style="padding-top:10px;">
				<form method="post" action="Joinaction.jsp">
					<h3 style="text-align: center;">회원가입 화면</h3>
                    <div class="form-group"><!-- 입력 항목의 그룹화 -->
						<input type="text" class="form-control" placeholder="ID" name = "userID" maxlength = "20">
					</div>
                    <div class="form-group">
						<input type="password" class="form-control" placeholder="비밀번호" name = "userPassword" maxlength = "20">
					</div>

위에 있는 코드는 Login.jsp와 Join.jsp 코드가 동일 한 부분이다.

ID, 비밀번호 입력 창까지는 동일하다.

이제 이 뒤에 추가적으로 코드를 추가해서 회원가입 창을 만들어 준다.

3. 이름 창 만들기

<div class="form-group"><!-- 입력 항목의 그룹화 -->
  <input type="text" class="form-control" placeholder="이름" name = "userName" maxlength = "20">
</div>
˙ input type = "text" = 이름을 입력하기 위해서  text 창을 사용

˙ name = "userName" = 입력 값을 userName 변수에 전달

 

 

4. 성별 창 만들기

성별 창 같은 경우 남자 여자 버튼 중 선택을 할 수 있도록 만들어야 한다.

<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 = "btn-group" data-toggle = "buttons"> = 남자 여자 성별 선택시 버튼 형식으로 선택하기 위해

˙ <label class = "btn btn-primary active"> = 버튼 색깔

˙ <input type = "radio" name = "userGender" autocomplete="off" value="남자" checked>남자 = 남자 선택창

˙ <input type = "radio" name = "userGender" autocomplete="off" value="여자" checked>여자 = 여자 선택창

5. 이메일 입력 창 만들기

<div class="form-group">
	<input type="email" class="form-control" placeholder="이메일" name = "userEmail" maxlength = "50">
</div>
˙ input type = "email" = email 입력창, 이메일 폼으로 집어 넣지 않으면 에러가 난다.

6. 전체적인 코드

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>    <!--  위의 페이지 : 페이지 인코딩 하는 부분, UTF-8을 사용하는 이유 : 국제적인 코딩언어, 한글 영어 둘다 보여주는 인코딩 언어    -->

<!DOCTYPE html>
<html>
<head>
<meta http-equiv = "Content-type" content = "text/html"; charset="UTF-8">
<meta name = "viewport" content="width=device-width", inital-scale="1">   <!-- 반응형 웹사이트 적용을 위해 8번 줄을 적어줘야함 -->
<link rel="stylesheet" href="css/bootstrap.css">  <!-- 다운받은 css 적용을 하겠다고 알려줌 -->

<title>회원 가입 페이지</title>
</head>
<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-expended="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 mr-auto">
				<li class="nav-item active">
					<a class = "nav-link" href="Main.jsp">메인<span class = "sr-only">(current)</span></a></li>
				<li class="nav-item">
					<a class = "nav-link" href="Practice.jsp">게시판</a>
				</li>	
				<li class="nav-item">
					<a class = "nav-link" href="Practice.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 class="active"><a href="Login.jsp">로그인</a></li><!-- default로 적용되는 것은 로그인 -->
						<li><a href="Join.jsp">회원가입</a></li><!-- dropmenu 2 -->
						<li><a href="https://tkdrms568.tistory.com">내 블로그로 이동하기</a></li><!-- dropmenu 3 -->
					</ul>
				</li>
			</ul>
		</div>
	</nav>
	<div class="container"><!-- 컨텐츠를 감싸기 위해 컨테이너 사용 -->
		<div class="col-lg-10"></div>
		<div class="col-lg-10">
			<div class="jumbotron" style="padding-top:10px;"><!-- 네모난 회색박스 -->
				<form method="post" action="Joinaction.jsp">
					<h3 style="text-align: center;">회원가입 화면</h3>
					<div class="form-group"><!-- 입력 항목의 그룹화 -->
						<input type="text" class="form-control" placeholder="ID" name = "userID" maxlength = "20">
					</div><!-- id 창 만들기 form-control을 사용하므로 Bootstrap 자체만의 스타일로 컨트롤이 표시됨 -->
					<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-warning form-control" value="회원가입">
				</form>
		</div>
	</div>
	<script src="https://code.jquery,com/jquery-3.4.1.min.js"></script><!-- jquery 사용을 위해서 -->
	<script src="js/bootstrap.js"></script><!-- js 사용하기 -->
</body>
</html>

7. 회원가입 동작 코드 작성1

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();  // sql문 실행 결과 값을 return
		} catch(Exception e) {
			e.printStackTrace();
		}return -1;  // DB 오류
	}

다음 코드는 회원가입 창에서 정보를 받아 오면 그 값을 join 함수에 집어 넣는 코드이다.

1. String sql = "insert into user values(?,?,?,?,?)";
-> 회원가입시 받는 정보가 5개이기 떄문에 ?를 5개 만들어 준다.
2. pstmt = conn.prepareStatement(sql);
-> pstmt 변수에 sql문을 집어 넣어 DB에서 sql문을 실행 시킴
3. pstmt.setString(1,user.getUserID());
-> 첫번째 물음표에 userID를 집어 넣는다.
4. return pstmt.executeUpdate();
-> sql문 결과 값을 return
return -1;
-> 만약 DB오류가 생기면 -1을 return

 

 

8. 회원가입 동작 코드 작성2

다음과 같이 회원가입 창을 만들었으면 회원가입 동작할 수 있도록 코드를 작성한다.

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

만약 아이디, 비밀번호, 이름, 성별, 이메일 중 하나라도 입력이 되지 않았으면 에러 코드 창을 띄워 준다.

 

9.  user 정보를 받았을 경우

else {
		userDAO userDao = new userDAO();
		int result = userDao.join(user);

다음과 같이 입력 user 정보를 받은 경우 join 함수에 user 정보를 input 변수로 사용한다.

10. DB 오류가 날 경우(ID가 존재할 시)

if(result==-1){ 
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("alert('이미 존재하는 ID 입니다.')");
			script.println("history.back()"); 
			script.println("</script>");
		}

만약 ID가 존재할 경우 -1을 return 해주는데 -1을 return 해주는 경우  '이미 존재하는 ID 입니다.'라는 경고창을 띄워준다.

 

11. 로그인 성공 시

else{ 
			PrintWriter script = response.getWriter();
			script.println("location.href = 'Main.jsp' ");
			script.println("</script>");
}

다음과 같이 로그인에 성공하면 Main.jsp로 이동시켜 준다

반응형