개발/JSP 게시판 만들기

[JSP 게시판 만들기] 4강 로그인 기능 구현하기

ee2ee2 2021. 10. 31. 02:15
728x90
반응형

참고 유튜브

https://www.youtube.com/watch?v=RYo3OGlRoJw&list=PLRx0vPvlEmdAZv_okJzox5wj2gG_fNh_6&index=4 

지난 시간 데이터베이스 구축을 완료하였다.

로그인 페이지 디자인을 완료하였으니, 로그인 기능을 구현해보겠다.


기능 구현에 앞서, JAVA-MySQL을 위해서는 MySQL JDBC Connecter 설치 및 적용 과정이 필요하다.

기능 구현 후 바로 테스트 가능하도록 설치 완료 후 기능 구현을 진행하도록 한다.

 

[MySQL] JAVA 연동을 위한 MySQL JDBC Connecter 설치 및 적용하기

MySQL-JAVA 연동을 위한 MySQL JDBC Connecter 설치 및 적용하는 방법을 소개한다. 먼저, 설치에 앞서 JDBC가 뭔지 간단하게 알아보자. 1. JDBC(Java Database Connectivity)란?  : 자바를 통해 데이터베이스에..

ee2ee2.tistory.com

 


로그인 기능을 위해선 데이터베이스의 회원 정보 테이블에 접근 가능할 수 있어야 한다.

이를 위해선 DAO(Data Access Object)를 생성이 필요하다.

 

DAO (Data Access Object)란?

 - 실질적으로 DB Data에 접근(조회, 변경, 삭제 등)하는 트랜잭션 객체 

 

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 pstat;
	private ResultSet rs;
	
	//생성자는 인스턴스를 생성할 때 자동으로 실행되는 부분)
	public UserDAO() {
		try {
			String dbURL ="jdbc:mysql://localhost:3306/BOARDSITE";
			String dbID = "root";
			String dbPW = "root계정의 패스워드";
			
			Class.forName("com.mysql.cj.jdbc.Driver");	 //MySQL에 접속할 수 있도록 하는 매개체(라이브러리)
			conn = DriverManager.getConnection(dbURL, dbID, dbPW); //매개변수를 통해 DB에 접속할 수 있도록 함. 접속이 완료되면 conn객체에 접속정보가 담기게 됨.
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public int login(String userID, String userPW) {
		String SQL = "SELECT userPW FROM USER WHERE userID = ?";
		
		try {
			pstat = conn.prepareStatement(SQL);
			pstat.setString(1, userID);
			rs = pstat.executeQuery();	//쿼리 실행 결과는 담는 변수
			
			if(rs.next()) {	//쿼리 실행 결과 데이터가 존재하면 해당 영역이 실행
				if(rs.getString(1).equals(userPW)) {
					return 1;   //로그인 성공
				}
				else
					return 0;	//로그인 실패(비밀번호 불일치)
			} 
			
			return -1;	//ID가 없음
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return -2; //-2는 데이터베이스 오류를 의미함.
	}
}

 

 

#위 코드에서 낯선 부분을 살펴보자.

 

 


이제 위 기능을 실제로 사용하고, 결과를 나타내는 화면을 구현해보자.

지난 시간 구현한 login.jsp를 살펴보면, 로그인 ID/PW 값을 loginAction.jsp 페이지로 보내줬다.

loginAction.jsp 를 구현해보자.

 

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="userPW"/>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content= "text/html; charset=UTF-8">
<title>JSP 게시판 웹 사이트</title>
</head>
<body>
	<%
		UserDAO userDao = new UserDAO();
		int result = userDao.login(USER.getUserID(), USER.getUserPW()); 
		
		if(result == 1){
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("location.href = 'main.jsp'");
			script.println("</script>");	
		} else if(result == 0){
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("alert('비밀번호가 일치하지 않습니다.')");
			script.println("history.back()");
			script.println("</script>");	
		} else if(result == -1){
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("alert('존재하지 않는 아이디입니다.')");
			script.println("history.back()");
			script.println("</script>");	
		} else if(result == -2){
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("alert('데이터베이스 오류가 발생했습니다.')");
			script.println("history.back()");
			script.println("</script>");	
		}
	%>
</body>
</html>

 

* 추가 설명은 접은 글을 참고하자!

더보기

위 코드 상단의 태그의 의미를 알아보자.

 

[JSP 태그]

 - HTML 기반의 JSP 코드 내에 JAVA 코드를 삽입 가능하도록 해주는 태그

   JAVA 코드 작성을 위해서는 태그가 필수이다.

 

1) <%@    %>

 : "지시자"로 불리며, JSP 페이지가 컨테이너에게 필요한 메세지를 보내기 위한 태그

 

2) <%    %>

: "스크립틀릿(scritlet)"로 불리며, 자바 코드를 삽입하기 위한 태그

 

 

<%@ page import="USER.UserDAO" %>

: UserDAO 클래스를 import

 

<jsp:useBean id="USER" class="USER.User" scope="page"/>

 - 자바 빈(Java Bean)을 사용한다고 명시

 - 데이터를 조회 및 저장/변경하기 위한 역할의 User(Java Bean)를 현재 페이지 내에서 USER라는 ID로 세팅


<jsp:setProperty name="USER" property="userID"/>

: 자바 빈(Java Bean)의 userID setter 메소드를 사용하기 위함을 설정

  자바 빈(Java Bean)에 설정한 변수명과 똑같아야 한다.

 


이제 로그인 기능을 한 번 사용해보자!

 

처음 접속 화면


데이터베이스에 없는 ID를 입력했을 때,


ID는 맞고, 비밀번호는 틀릴 때,

 


데이터 베이스 연결을 실패했을 때,


로그인 성공일 때!

(로그인 성공시 main.jsp 화면을 보이기로 하였지만 아직 구현 전이기에 아래와 같이 뜬다)

 

 

 

다음은 회원가입 페이지를 구현해 볼 것이다!