3. 회원가입 페이지 작업

황고은·2022년 12월 1일
0

나동빈님의 jsp 게시판 만들기 강좌를 참고해 작업했다.
https://www.youtube.com/watch?v=wEIBDHfoMBg&list=PLRx0vPvlEmdAZv_okJzox5wj2gG_fNh_6

1. 데이터베이스 생성

로그인 페이지 만들기 글의 내용과 동일하다.

2. JSP 파일 생성

2-1. login.jsp


팀원 분이 보내주신 코드를 사용했다.

3. action.jsp 파일 생성

3-1. loginAction.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="userName"/>
<jsp:setProperty name="user" property="userNickname"/>
<jsp:setProperty name="user" property="userPassword" />

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Instagram</title>
</head>

<body>
	<%
		if (user.getUserID() == null || user.getUserName() == null || user.getUserPassword() == null || user.getUserNickname() == 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("location.href = 'login.jsp'");
				script.println("</script>");
			}
		}
	%>
</body>
</html>

코드 마지막 부분 else 부분을 else if (result == 0)이라고 써놔서 자꾸 오류가 떴다. 로그인 액션 jsp 파일을 복사해오면서 수정하지 않은 탓이다.

4. Java class

4-1. User.java

로그인 페이지 만들기 글의 내용과 동일하다.

4-2. 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;	//db에 접근하는 객체
	private ResultSet rs;
	PreparedStatement pstmt;
	
	public UserDAO() {
			try {// create a mysql database connection
				 String url = "jdbc:mysql://localhost/instagram";
				 Class.forName("com.mysql.jdbc.Driver");
			     conn = DriverManager.getConnection(url, "root", "0000");
			 }catch(Exception e) {
				 e.printStackTrace();
			 }
	}
	
	public int login(String userID, String userPassword) {
		String SQL = "SELECT userPassword FROM USER WHERE userID = ?"; 
		//?에 ID를 넣어줄 수 있게끔 한다 실제로 존재하는지도 비교
		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 {
			pstmt = conn.prepareStatement(SQL);
			pstmt.setString(1, user.getUserID());
			pstmt.setString(2, user.getUserPassword());
			pstmt.setString(3, user.getUserName());
			pstmt.setString(4, user.getUserNickname());
			return pstmt.executeUpdate();
		}catch(Exception e) {
			e.printStackTrace();
		}
		return -1; //데이터베이스 오류
	}
}

회원가입 시 필요한 함수를 추가했다. (근데 자바에서도 함수라는 표현을 쓰나?)

최종 완성본

저 인스타그램 로고 위치를 바꾸고 싶은데, 조원 분이 코드 출처를 가져올 때까지 대기 상태 유지...

회원 가입 시 입력한 아이디가 이미 존재하면 alert 창을 뜨게 하도록 했다.

회원가입이 완료되면 alert 창이 뜬 뒤 로그인 페이지로 이동한다.

profile
Snow Roller : 영차영차 눈을 굴려보아요 ⛄🚎

0개의 댓글