STUDY/programing

JSP 기초 : 게시판 만들기 3. 로그인 처리 (mysql)

NightOwl 2018. 10. 18. 15:25
728x90

1. 로그인 기능 구현


UserDAO에서 DAO는 데이터베이스 접근 객체의 약자

회원 데이터 베이스에 회원 정보를 불러오거나 입력하고자 할떄 사용


UserDAO.java



package user;


import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;


public class UserDAO {

// dao : 데이터베이스 접근 객체의 약자로서

// 실질적으로 db에서 회원정보 불러오거나 db에 회원정보 넣을때


private Connection conn; // connection:db에접근하게 해주는 객체

private PreparedStatement pstmt;

private ResultSet rs;


// mysql에 접속해 주는 부분

public UserDAO() { // 생성자 실행될때마다 자동으로 db연결이 이루어 질 수 있도록함

try {

String dbURL = "jdbc:mysql://localhost:3306/BBS"; // localhost:3306 포트는 컴퓨터설치된 mysql주소

String dbID = "admin";

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 : prepared statement 정해진 sql문장을 db에 삽입하는 형식으로 인스턴스가져옴

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; // 데이터베이스 오류를 의미

}


}


 



loginAction.jsp

 

<%@ 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>jsp 게시판 웹사이트</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>



로그인 처리 페이지 완료.


2. Connector/J 다운로드





mysql과 jsp를 연결.

mysql에 접속하기 위한 드라이버를 추가해야한다.







jar파일을 라이브러리에 추가


WebContent - Web-INF - Lib에 추가


빌드패스 지정을 해준다.



실행하여 로그인 테스트를 해보니

DB 연결 Error!!!


동빈나님의 강의에서는 바로 되지만

나는 Timezone 오류발생 ㅠㅠ 

mysql 버전이 업그레이드 되면서 생기는 오류인듯 했다.


dbURL 뒤에

?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC


을 추가하니 타임존 설정을 해주니

로그인이 제대로 작동한다.


 




3. 회원가입 화면 구현


join.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">

<!-- 뷰포트 -->

<meta name="viewport" content="width=device-width" initial-scale="1">

<!-- 스타일시트 참조  -->

<link rel="stylesheet" href="css/bootstrap.min.css">

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

</head>

<body>

<!-- 네비게이션  -->

<nav class="navbar navbar-default">

<div class="navbar-header">

<button type="button" class="navbar-toggle collapsed"

data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"

aria-expaned="false">

<span class="icon-bar"></span> <span class="icon-bar"></span> <span

class="icon-bar"></span>

</button>

<a class="navbar-brand" href="main.jsp">JSP 게시판</a>

</div>

<div class="collapse navbar-collapse"

id="#bs-example-navbar-collapse-1">

<ul class="nav navbar-nav">

<li><a href="main.jsp">메인</a></li>

<li><a href="bbs.jsp">게시판</a></li>

</ul>


<ul class="nav navbar-nav navbar-right">

<li class="dropdown"><a href="#" class="dropdown-toggle"

data-toggle="dropdown" role="button" aria-haspopup="true"

aria-expanded="false">접속하기<span class="caret"></span></a>

<ul class="dropdown-menu">

<li class="active"><a href="login.jsp">로그인</a></li>

<li><a href="join.jsp">회원가입</a></li>


</ul></li>

</ul>

</div>

</nav>

<!-- 로긴폼 -->

<div class="container">

<div class="col-lg-4"></div>

<div class="col-lg-4">

<!-- 점보트론 -->

<div class="jumbotron" style="padding-top: 20px;">

<!-- 로그인 정보를 숨기면서 전송post -->

<form method="post" action="joinAction.jsp">

<h3 style="text-align: center;">회원가입</h3>

<div class="form-group">

<input type="text" class="form-control" placeholder="아이디"

name="userID" maxlength="20">

</div>

<div class="form-group">

<input type="password" class="form-control" placeholder="비밀번호"

name="userPassword" maxlength="20">

</div>

<div class="form-group">

<input type="text" class="form-control" placeholder="이름"

name="userName" maxlength="20">

</div>

<div class="form-group" style="text-align: center;">

<div class="btn-group" data-toggle="buttons">

<label class="btn btn-primary active"> <input

type="radio" name="userGender" autocomplete="off" value="남자"

checked>남자

</label> <label class="btn btn-primary"> <input type="radio"

name="userGender" autocomplete="off" value="여자" >여자

</label>

</div>

</div>

<div class="form-group">

<input type="text" class="form-control" placeholder="이메일"

name="userEmail" maxlength="50">

</div>


<input type="submit" class="btn btn-primary form-control"

value="회원가입">



</form>

</div>

</div>

</div>



<!-- 애니매이션 담당 JQUERY -->

<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>

<!-- 부트스트랩 JS  -->

<script src="js/bootstrap.js"></script>


</body>

</html>


 


join.jsp 화면 디자인










728x90