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>
'Backend > Jsp' 카테고리의 다른 글
Jsp 게시판 만들기 - 12. 메인 페이지 만들기 (0) | 2023.03.29 |
---|---|
Jsp 게시판 만들기 - 11. 접속회원 세션부여(loginAction/joinAction) (0) | 2023.03.29 |
Jsp 게시판 만들기 - 3. 로그인 페이지 만들기 (0) | 2023.03.29 |
Jsp 게시판 만들기 - 10. 회원가입(joinAction.jsp) (0) | 2023.03.29 |
Jsp 게시판 만들기 - 9. 회원가입 기능 구현(UserDAO) (0) | 2023.03.29 |