01) UserDAO 클래스는 실제로 데이터베이스에 접근해서 어떠한 데이터를 가져오거나 데이터를 넣는 역할을 하는 데이터 접근 개체이다.
02) UserDAO 클래스 안에 하나의 함수 하나 추가해 회원가입 기능을 구현한다.
[소스코드 1]
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;
// ㄴ executeQuery(String sql)을 통해 쿼리를 실행하면 ResultSet타입으로 반환을 해주어 결과값을 저장할 수 있다.
//mysql에 접속을 하게하는 라이브러리 역할을 한다.
public UserDAO() {
try {
String dbURL = "jdbc:mysql://localhost:3306/BBS";
String dbID = "root";
String dbPassword = "1004";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(dbURL, dbID, dbPassword);
} catch (Exception e) { // 트라이 켓치 예외처리하고 오류가 무엇인지 알수있게한다.
e.printStackTrace();
}
}
public int login(String userID, String userPassword) { // 로그인을 시도하는 함수
String SQL = "SELECT userPassword FROM USER WHERE userID = ?"; // 유저테이블에서 사용자 비밀번호를 가져온.
// 사용자의 ID를 받아서 ID가 실제로 존재하는지 존재한다면 비밀번호가 무엇인지 DB에서 가져온다.
try {
pstmt = conn.prepareStatement(SQL); //어떤 정해진 sql 문장을 DB에 삽입한다.
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.getUserGender());
pstmt.setString(5, user.getUserEmail());
return pstmt.executeUpdate();
} catch(Exception e) {
e.printStackTrace();
}
return -1; // 데이터베이스 오류
}
}
[소스코드 2]
사용자가 사이트에 접속해 회원가입을 시도를 했을 때, 'joinAction.jsp'로 이동하도록 되어있다.
회원가입을 처리해주는 새로운 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>
<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("location.href = 'main.jsp'");
script.println("</script>");
}
}
%>
</body>
</html>
[실행화면 1]
회원가입 화면에 정보를 입력한다.
[실행화면 2]
'회원가입' 버튼을 누르면
- 정상적으로 회원가입되어 'http://localhost:8080/BBS/main.jsp' 페이지로 넘어간다.
[실행화면 3]
회원가입이 정상적으로 완료되었는지 데이터베이스에서 정보를 검색한 화면이다 .
[실행화면 4]
실행화면 1 화면과 동일하게 정보를 입력 후 회원가입 버튼을 누르면
- '이미 존재하는 아이디입니다.' 라는 메시지가 뜬다.
ㄴ PRIMARY KEY가 중복일 경우 alert 로 이미 존재하는 아이디입니다.
출처 :
https://www.youtube.com/watch?v=v2mmPRLjJGw&list=PLRx0vPvlEmdAZv_okJzox5wj2gG_fNh_6&index=6
'Back End > JSP & Servlet' 카테고리의 다른 글
JSP 게시판 만들기 - 8강 게시판 메인 페이지 만들기 (0) | 2022.02.21 |
---|---|
JSP 게시판 만들기 - 7강 접속한 회원 세션관리 (0) | 2022.02.21 |
JSP 게시판 만들기 - 5강 회원가입 페이지 디자인 (0) | 2022.02.21 |
JSP 게시판 만들기 - 4강 로그인 기능 구현하기 (0) | 2022.02.21 |
JSP 게시판 만들기 - 3강 회원 DB(mysql)구축 (0) | 2022.02.20 |