본문 바로가기
{Java}

21.06.21 {코딩일기} 동빈나 유튜버 JSP게시판 만들기 강좌(4) | 전자정부프레임워크 eclipse 게시판 만들기{day3}

by Davey 2021. 6. 21.
728x90

https://www.youtube.com/watch?v=P5s5JwvZjBA&t=27s&pp=sAQA 

게시판 코드작성완료 후기 생생하게 공유드립니다. 많이 놀러와주세여:)

#DAO(Database Access Object)

실질적으로 데이터베이스에 회원정보를 넣거나 가져올때 쓰이는 클래스를 가르키는 개념적인 용어.
여기서 Connection이라는 데이터베이스 접근객체를 만들고, PrepareStatement, ResultSet 등 어떤 정보를
담을 수 있는 객체를 아래와 같이 생성한다.
ctrl+shit+O를 눌러서 Organize Imports인터페이스를 띄우고, java.sql.Connection을 선택해 Finish 버튼을 누른다.

package user;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class UserDAO {
	
	private Connection conn;
	private PreparedStatement pstmt;
	private ResultSet rs;

}

# 생성자 생성

 외부인터페이스를 추가해준 다음, UserDAO라는 생성자를 만들어준다. 그러면 UserDAO라는 객체를 하나 만들었을 때 자동으로 데이터베이스에 연결되도록 아래와 같이 UserDAO.jave 파일에 코드를 추가해준다.

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;

	public UserDAO() {
		try {
			String dbURL = "jdbc:mysql://localhost:3306/nvrg";
			String dbID = "nvsg";
			String dbPassword = "1234";
			Class.forName("org.mariadb.jdbc.Driver");
			conn = DriverManager.getConnection(dbURL, dbID, dbPassword);
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

# mariadb에 접속 및 확인 : try catch문

try catch를 이용해서 예외처리를 할 수 있도록 해주며,
만약 예외가 발생한 경우, e.printStackTrace();를 실행시켜
오류가 무엇인지 알려준다.
이때 e는 참조변수이다.
localhost라는것은 본인컴퓨터주소를 의미하며
localhost:3306는 내서버에 설치된 mairadb 서버 자체를 의미한다. mysql이나 mariadb나 서버자체를 의미하는 포트는 3306으로 동일하다.
뒤에 nvrg는 이미 생성해놓은 db명을 가리킨다.
결국 String dbURL은 nvrg db에 접속하는 url을 의미한다.
나머지 dbID, dbPassword는 처음 mariadb에 nvrg DB를 생성한후 권한을 넘겨준 id와 해당pw를 입력해주었다.
나같은 경우 id는 nvsg였고, pw 1234였다.
그리고 Class.forName(".."); 에 ".."에 해당하는 부분은
mariadb의 경우 "org.mariadb.jdbc.Driver"
mysql의 경우 "org.mysql.jdbc.Driver" 로 값을 달리 설정해주어야 한다.
그리고 Connection이라는 객체에 앞서 위에서 설정한 db로 접속이 완료가 되면 접속정보가 담기도록 하는 코드를 
conn = DriverManager..(생략)같이 추가해주면 된다.

 


# loginGo.jsp code

login.jsp에 사용자가 id와 password를 입력하면 loginGo.jsp페이지에서 
사용자가 입력한 id와 pw를 처리하는 코드를 아래와 같이 추가한다.
login.jsp에서 post 방식으로 userID,userPassword 넘기는 action을 받아올 수 있도록
아래와 같은 코드를 맨 상단에 추가해준다.

<%@ page import="user.UserDAO" %>
<%@ page import="java.io.PrintWriter" %>
<jsp:useBean id="user" class="user.User" scope="page"/>
<jsp:setProperty  name="user" property="userID"/>
<jsp:setProperty  name="user" property="userPassword"/>

loginGo.jsp파일은 아래와 같다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="user.UserDAO" %>
<%@ page import="java.io.PrintWriter" %>
<jsp:useBean id="user" class="user.User" scope="page"/>
<jsp:setProperty  name="user" property="userID"/>
<jsp:setProperty  name="user" property="userPassword"/>
<!-- <% request.setCharacterEncoding("UTF-8"): %> 이 코드는 에러가 떠서 삭제했더니 정상작동해서 주석처리함-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width", initial-scale="1">
<title>BluevulpeBoard</title>
</head>
<body style= "background-color : lightblue;">
 <%
 	UserDAO userDAO = new UserDAO();
 	int result = userDAO.login(user.getUserID(), user.getUserPassword());
 	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('존재하지 않는 id입니다.')");
 		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>

위 body 태그안에 추가한 자바코드의 login 메소드의 result결과값은
앞서 위에서 생성했던 UserDAO.java에서 가져온건데 아래와 같이 database에 유저가 입력한 정보가 일치하는지
여부를 확인하여 성공여부 및 다른 조건케이스에 따라 넘겨주는 값이 달라지도록 아래코드를 추가해 수정해준다.

# 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;

	public UserDAO() {
		try {
			String dbURL = "jdbc:mysql://localhost:3306/nvrg";
			String dbID = "nvsg";
			String dbPassword = "1234";
			Class.forName("org.mariadb.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 = ?";
		try {
			pstmt = conn.prepareStatement(SQL);
			pstmt.setNString(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; //데이터베이스 오류
	}
}

# mariadb jdbc driver 다운 및 WebContent>WEB-INF>lib폴더내 복사

https://downloads.mariadb.org/connector-java/

 

MariaDB Connector/J - MariaDB

MariaDB Connector/J 1.1 Series The MariaDB Client for Java is used to connect applications developed in Java to MariaDB and MySQL databases. The client library is LGPL licensed. See this article for more information

downloads.mariadb.org

위 링크로 들어가서 mariadb-java-client-2.4.4.jar zip파일을 다운받아 처음엔 압축해제 해서
폴더내부를 헤매며 jar파일을 찾는 삽질을 했다... zip파일을 압축해제하지말고
그대로 해당 프로젝트 WebContent>WEB-INF>lib폴더로 붙여넣기 해주면 끝~! 다들 나처럼 헤매지 말길 바란다..

# jdbc드라이버 작동확인 방법

이전에 미리 생성해놓았던 샘플데이터

위 데이터를 가지고 테스트해보기전에, 우선 톰캣서버를 종료하고, 기존에 띄워진 파일도 다 종료한다.
서버를 다시시작시키면 아래와 같이 화면이 login화면으로 바로 넘어가는것을 확인 할 수 있다.
위 데이터를 입력하면 main.jsp로 경고창 없이 잘 넘어가는것을 확인할 수 있다.
만약 테이블에 없는 데이터 id를 입력하면 alert가 잘 작동될까? 
아래처럼 확인해보자.

테이블에 없는 데이터를 입력하고 로그인을 시도함
존재하지 않는 id라며 친절하게 알림창이 잘띄워짐을 확인가능:)

bluevulpe id에 비밀번호를 다르게 입력한다면?

딱봐도 1234보다 확연히 길어보이는 password 실루엣 ㅋㅋㅋㅋㅋ
비밀번호가 다르다고 아주 잘 알려줌:)

Copyright ⓒ 2021 by bluevulpe All Contents cannot be copied without permission.

728x90

댓글