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가 잘 작동될까?
아래처럼 확인해보자.
bluevulpe id에 비밀번호를 다르게 입력한다면?
Copyright ⓒ 2021 by bluevulpe All Contents cannot be copied without permission.
728x90
댓글