MySQL & Eclipse 로그인 연동과 로그아웃

Jang Seok Woo·2020년 8월 27일
1

웹개발

목록 보기
10/31

로그인 Mysql DB연동

어제 만들어 둔 로그인페이지와 새로 설치한 mysql에 테이블을 생성해 회원 정보를 연동해보도록 하겠다.

개발환경 : Mysql 8.0, eclipse 2020-03

MYSQL을 켜고

먼저 Database를 생성하자
게시판을 만들거니까 이름은 BBS

CREATE DATABASE BBS;

유저 테이블을 생성한다

CREATE TABLE USER(
userID VARCHAR(20),
userPassword VARCHAR(20),
userName VARCHAR(20),
userGender VARCHAR(20),
userEmail VARCHAR(50)
PRIMARY KEY (userID)
);

테이블을 생성한 뒤 좌측 Java Resources 내부에 src파일 안에 Package를 새로 만든다.
Package이름은 user
user안에 java파일을 새로 만들고 이름은 User.java

MySQL에서 만든 테이블을 그대로 담을 수 있도록 클래스를 선언해준다.

변수명이 똑같이

package user;

public class User {

	private String userID;
	private String userPassword;
	private String userName;
	private String userGender;
	private String userEmail;
	
	public String getUserID() {
		return userID;
	}
	public void setUserID(String userID) {
		this.userID = userID;
	}
	public String getUserPassword() {
		return userPassword;
	}
	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserGender() {
		return userGender;
	}
	public void setUserGender(String userGender) {
		this.userGender = userGender;
	}
	public String getUserEmail() {
		return userEmail;
	}
	public void setUserEmail(String userEmail) {
		this.userEmail = userEmail;
	}
	
}

그리고 mySQL의 user Table과 연동할 UserDAO.java파일을 user패키지 안에 새로 만든다.

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/BBS";
			String dbID = "root";
			String dbPassword = "root";
			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);
			pstmt.setString(1, userID);
			rs = pstmt.executeQuery();
			if(rs.next()) {
				if(rs.getString(1).contentEquals(userPassword)) {
					return 1;
				}
				else
					return 0;
			}
			return -1;
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return -2;
	}
}

MySQL의 Database와 연동에 있어 중요한 코드 3줄을 보고 가자

String dbURL = "jdbc:mysql://localhost:3306/BBS"; 

SQL연결에 필요한 URL이다. 지난시간에 설치한 TOMCAT을 이용해 서버에 BBS유저로 접근한다.

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

Jdbc를 이용해 DB와 jsp를 연동한다.

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

이 명령어를 통해 DB와 jsp를 연결한다.

로그인 함수를 만든다.
로그인은 ID를 가져와 DB내부의 password와 비교하여 참인지, 거짓인지, 아이디가 존재하는지, DB오류인지를 return한다.

1을 리턴해야 로그인이 되고, 0은 비밀번호가 틀렸습니다, -1은 아이디가 없습니다, -2는 DB 오류를 나타낸다.

이 해당 로직을 jsp로 구현한다. -- 어제 함 하지만 여기서 오류발생

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"); %>
<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>Insert title here</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();
		int result = userDAO.login(user.getUserID(), user.getUserPassword());
		if(result==1){
			session.setAttribute("userID",user.getUserID());
			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>");	
		}
		else if(result==-2){
			PrintWriter script = response.getWriter();
			script.println("<script>");
			script.println("alert('데이터베이스 오류가 발생했습니다.')");
			script.println("history.back()");
			script.println("</script>");	
		}
	
	
	
	%>
	
</body>
</html>

다음과 같이 한글이 깨진다.

첫 번째 이유는 지난시간 만든 login.jsp와 loginAction.jsp의 상단에 charset과 Encoding부분이 UTF-8이 아닌, EUC-KR로 되어있기 때문이다.

바꿔준다.

<%@ 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"); %>

두번째 이유는 mysql에 table을 utf-8로 받도록 변경한다.

ALTER TABLE  user  convert to charset utf8;

이전에 넣은 테이블은 안타깝게도 적용이 안된다.

로그인은 정상적으로 처리되나, URL에 main.jsp가 있고, main.jsp를 아직 만들지 않아 페이지를 불러올 수 없다고 나오면..
성공.

추가) 로그아웃은 짧아서..

logout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>logout page</title>
</head>
<body>
	<%
		session.invalidate();
	%>	
	<script>
		location.href="main.jsp";
	</script>
</body>
</html>
profile
https://github.com/jsw4215

0개의 댓글