이제 로그인 기능을 구현할것이다. 그리고 DB와도 연동!
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/DAEHEE?serverTimezone=UTC";
String dbID = "root";
String dbPassword = "1234";
Class.forName("com.mysql.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);
// sql인젝션 같은 해킹기법을 방어하는것... pstmt을 이용해 하나의 문장을 미리 준비해서(물음표사용)
// 물음표해당하는 내용을 유저아이디로, 매개변수로 이용.. 1)존재하는지 2)비밀번호무엇인지
pstmt.setString(1, userID);
// rs:result set 에 결과보관
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; // 데이터베이스 오류를 의미
}
}
다음은 로그인 액션 코드 작성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="user.UserDAO" %> <!-- userdao의 클래스 가져옴 -->
<%@ page import="java.io.PrintWriter" %> <!-- 자바 클래스 사용 -->
<% request.setCharacterEncoding("UTF-8"); %>
<!-- 한명의 회원정보를 담는 user클래스를 자바 빈즈로 사용 / scope:페이지 현재의 페이지에서만 사용-->
<jsp:useBean id="user" class="user.User" scope="page" />
<jsp:setProperty name="user" property="userID" />
<jsp:setProperty name="user" property="userPassword" />
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>나의 게시판 웬 사이트</title>
</head>
<body>
<%
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('존재하지 않는 아이디 입니다.')");
script.println("history.back()");
script.println("</script>");
}
//DB오류
else if(result == -2){
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('DB오류가 발생했습니다.')");
script.println("history.back()");
script.println("</script>");
}
%>
</body>
</body>
</html>