1. jsp에서 회원 데이터베이스 테이블에 접근할 수 있도록 DAO 생성

[java Resources - user - userDAO.java 클래스 파일 생성]

DAO는 Data Access Object의 약자

데이터베이스 접근 객체

 

Ctrl + shife + O [Orgenize imports] 눌러서

javasql.Connection 추가 <외부 라이브러리 추가>

 

public class UserDAO {

 

private Connection conn; //커넥션 - 데이터베이스에 접근하게 해주는 하나의 객체

private PreparedStatement pstmt;

private ResultSet rs; //정보를 담을 수 있는 하나의 객체

 

 

//

Ctrl + shife + O [Orgenize imports] 눌러서

javasql.Connection 추가 <외부 라이브러리 추가>

 

public UserDAO() { //생성자

try { //try catch 문구를 이용해서 예외처리해줄 수 있도록 하기

String dbURL = "jdbc:mysql://localhost:3306/BBS"; //본인 컴퓨터의 주소 : localhost / 

//localhost:3306 포트는 우리 컴퓨터에 설치된 mysql 서버자체를 의미

BBS란 데이터베이스에 접속할 수 있도록 해주기

 

String dbID ="root"; //내가 설정한 ID

String dbPassword = "root"; //내가 설정한 PW root 아님

Class.forName("com.mysql.jdbc.Driver");

conn = DriverManager.getConnection(dbURL, dbID, dbPassword )

} catch (Exception e) {

e.printStackTrace(); //오류가 뭔지 출력해주는 부분

} //실제로 mysql에 접속을 하게 해주는 부분

}

 

//**해킹 기법 방어 수단으로 PreparedStatement 이용

"SELECT userPassword FROM USER WHERE userID = ?";

하나의 문장을 미리 준비해놨다가 (문장에 물음표 삽입)

나중에 물음표에 유저 아이디를 넣어줌(매개변수로 넘어온 유저아이디)

실제로 데이터베이스에 아이디 입력 받아서 

그 아이디가 실제로 존재하는지 존재한다면 비밀번호는 뭔지

데이터베이스에서 가져오도록 하는 것

 

public int login(String userID, String userPassword) { //실제로 로그인을 시도하는 함수 만들기

String SQL = "SELECT userPassword FROM USER WHERE userID = ?"; //데이터베이스에 입력할 명령어를 sql문장으로 만듦 (유저 테이블에서 해당 사용자의 비밀번호를 가져오겠다)

try { //예외처리

pstmt = conn.prepareStatement(SQL); //pstmt 에 정해진 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.getUserGender());

pstmt.setString(5, user.getUserEmail());

return pstmt.executeUpdate();

} catch(Exception e) {

e.printStackTrace();

}

return -1; //데이터베이스 오류

}

 

}

데이터베이스에 접근하게 해주는 하나의 객체

정보를 담을 수 있는 객체

 

 

 

2.로그인을 시도하는 페이지 생성

[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"); %> //건너오는 모든 데이터를 UTF-8데이터로 받을 수 있도록 

 

javabeans 사용

한 명의 회원 정보를 담는 user라는 클래스를 'javabeans'로써 사용

<jsp:useBean id="user" class="user.User" scope="page" /> //scope 현재 페이지 안에서만 빈즈가 사용될 수 있도록 함

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

//로그인 페이지에서 넘겨준 useID를 그대로 받아서 한 명의 사용자의 userID에 넣어줌

<jsp:setProperty name="user" property="userPassword" />

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>JSP 게시판 웹 사이트</title>

</head>

<body>

<%

String userID = null;

if(session.getAttribute("userID") !=null){

userID = (String) session.getAttribute("userID");

}

if(userID !=null){

PrintWriter script = response.getWriter();

script.println("<script>");

script.println("alert('이미 로그인이 되어 있습니다.')");

script.println("location.href = 'main.jsp'");

script.println("</script>");

 

}

UserDAO userDAO = new UserDAO();           //userDAO 인스턴트 생성

int result = userDAO.login(user.getUserID(), user.getUserPassword()); 

//로그인을 시도할 수 있도록 함

로그인 페이지에서 입력된 값으로 넘어와서 로그인 함수에 넣어 실행

result에 담기게 됨

 

if(result == 1){

session.setAttribute("userID", user.getUserID());

PrintWriter script = response.getWriter();

script.println("<script>"); //스크립트 문장을 유동적으로 실행할 수 있도록 함

script.println("location.href = 'main.jsp'"); //로그인에 성공했을 때 main.jsp 페이지로 이동될 수 있게 입력

script.println("</script>");

}

else if(result == 0){ //0은 비밀번호가 틀릴 때 [로그인 페이지 코드에서 확인 가능]

PrintWriter script = response.getWriter();

script.println("<script>");

script.println("alert('비밀번호가 틀립니다.')");

script.println("history.back()"); //이전 페이지로 사용자를 돌려보내줌[로그인페이지로]

script.println("</script>");

}

else if(result == -1){ //-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>

 

 

+ Recent posts