JSP로 강의평가 웹 사이트 개발하기 ⑦ 로그인 및 로그아웃 구현하기
이번 시간은 JSP 강의평가(Lecture Evaluation) 웹 사이트 개발하기의 일곱 번째 시간입니다. 지난 시간에는 회원가입 및 이메일 전송 기능을 구현했습니다. 이제 실질적으로 회원가입에 성공한 사람이 로그인을 할 수 있도록 해주는 것입니다. 또한 로그인 이후에는 로그아웃도 할 수 있도록 개발을 해주어야겠지요. 바로 다음과 같이 userLoginAction.jsp와 userLogout.jsp를 작성하도록 합니다.
▶ userLoginAction.jsp: 실질적인 사용자의 로그인을 처리하는 부분입니다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="user.UserDTO"%>
<%@ page import="user.UserDAO"%>
<%@ page import="java.io.PrintWriter"%>
<%
request.setCharacterEncoding("UTF-8");
String userID = null;
String userPassword = null;
if(request.getParameter("userID") != null) {
userID = (String) request.getParameter("userID");
}
if(request.getParameter("userPassword") != null) {
userPassword = (String) request.getParameter("userPassword");
}
UserDAO userDAO = new UserDAO();
int result = userDAO.login(userID, userPassword);
if (result == 1) {
session.setAttribute("userID", userID);
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("location.href='index.jsp'");
script.println("</script>");
script.close();
} else if (result == 0) {
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('비밀번호가 틀립니다.');");
script.println("history.back();");
script.println("</script>");
script.close();
} else if (result == -1) {
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('존재하지 않는 아이디입니다.');");
script.println("history.back();");
script.println("</script>");
script.close();
} else if (result == -2) {
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('데이터베이스 오류가 발생했습니다.');");
script.println("history.back();");
script.println("</script>");
script.close();
}
%>
▶ userLogout.jsp: 사용자의 로그인 세션을 파기하는 부분입니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.PrintWriter"%>
<%
session.invalidate();
%>
<script>
location.href = 'index.jsp';
</script>
이제 실질적으로 로그인을 했을 때와 로그인을 하지 않았을 때를 세션으로 구분하기 위해서 다음과 같이 처리해주도록 하겠습니다.
▶ index.jsp 페이지의 윗부분
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.PrintWriter"%>
<%@ page import="user.UserDAO"%><!doctype html>
<html>
<head>
<title>강의평가 웹 사이트</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- 부트스트랩 CSS 추가하기 -->
<link rel="stylesheet" href="./css/bootstrap.min.css">
<!-- 커스텀 CSS 추가하기 -->
<link rel="stylesheet" href="./css/custom.css">
</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 = 'userLogin.jsp'");
script.println("</script>");
script.close();
}
boolean emailChecked = new UserDAO().getUserEmailChecked(userID);
if(emailChecked == false) {
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("location.href = 'emailSendConfirm.jsp'");
script.println("</script>");
script.close();
return;
}
%>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="index.jsp">강의평가 웹 사이트</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbar">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="index.jsp">메인</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="dropdown" data-toggle="dropdown">
회원 관리
</a>
<div class="dropdown-menu" aria-labelledby="dropdown">
<%
if(userID == null) {
%>
<a class="dropdown-item" href="userLogin.jsp">로그인</a>
<a class="dropdown-item" href="userRegister.jsp">회원가입</a>
<%
} else {
%>
<a class="dropdown-item" href="userLogout.jsp">로그아웃</a>
<%
}
%>
</div>
</li>
</ul>
<form action="./index.jsp" method="get" class="form-inline my-2 my-lg-0">
<input type="text" name="search" class="form-control mr-sm-2" placeholder="내용을 입력하세요.">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">검색</button>
</form>
</div>
</nav>
▶ userLogin.jsp 페이지의 윗부분
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.PrintWriter"%>
<!doctype html>
<html>
<head>
<title>강의평가 웹 사이트</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- 부트스트랩 CSS 추가하기 -->
<link rel="stylesheet" href="./css/bootstrap.min.css">
<!-- 커스텀 CSS 추가하기 -->
<link rel="stylesheet" href="./css/custom.css">
</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 = 'index.jsp'");
script.println("</script>");
script.close();
}
%>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="index.jsp">강의평가 웹 사이트</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbar">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="index.jsp">메인</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="dropdown" data-toggle="dropdown">
회원 관리
</a>
<div class="dropdown-menu" aria-labelledby="dropdown">
<%
if(userID == null) {
%>
<a class="dropdown-item" href="userLogin.jsp">로그인</a>
<a class="dropdown-item" href="userRegister.jsp">회원가입</a>
<%
} else {
%>
<a class="dropdown-item" href="userLogout.jsp">로그아웃</a>
<%
}
%>
</div>
</li>
</ul>
<form action="./index.jsp" method="get" class="form-inline my-2 my-lg-0">
<input type="text" name="search" class="form-control mr-sm-2" placeholder="내용을 입력하세요.">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">검색</button>
</form>
</div>
</nav>
▶ userRegisterAction.jsp 페이지의 윗부분
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.PrintWriter"%>
<!doctype html>
<html>
<head>
<title>강의평가 웹 사이트</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- 부트스트랩 CSS 추가하기 -->
<link rel="stylesheet" href="./css/bootstrap.min.css">
<!-- 커스텀 CSS 추가하기 -->
<link rel="stylesheet" href="./css/custom.css">
</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 = 'index.jsp'");
script.println("</script>");
script.close();
}
%>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="index.jsp">강의평가 웹 사이트</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbar">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="index.jsp">메인</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="dropdown" data-toggle="dropdown">
회원 관리
</a>
<div class="dropdown-menu" aria-labelledby="dropdown">
<%
if(userID == null) {
%>
<a class="dropdown-item" href="userLogin.jsp">로그인</a>
<a class="dropdown-item" href="userRegister.jsp">회원가입</a>
<%
} else {
%>
<a class="dropdown-item" href="userLogout.jsp">로그아웃</a>
<%
}
%>
</div>
</li>
</ul>
<form action="./index.jsp" method="get" class="form-inline my-2 my-lg-0">
<input type="text" name="search" class="form-control mr-sm-2" placeholder="내용을 입력하세요.">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">검색</button>
</form>
</div>
</nav>
이후에 현재 소스코드에서는 이메일 인증이 되지 않은 사람은 메인 페이지로 접속할 수 없습니다. 따라서 이메일 인증이 되지 않은 사람이 메인 페이지에 접속하면 emailSendConfirm.jsp로 이동하도록 만들었습니다. 그러므로 emailSendConfirm.jsp를 새롭게 만들어줍시다.
▶ emailSendConfirm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!doctype html>
<html>
<head>
<title>강의평가 웹 사이트</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- 부트스트랩 CSS 추가하기 -->
<link rel="stylesheet" href="./css/bootstrap.min.css">
<!-- 커스텀 CSS 추가하기 -->
<link rel="stylesheet" href="./css/custom.css">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="index.jsp">강의평가 웹 사이트</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbar">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="index.jsp">메인</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="dropdown" data-toggle="dropdown">
회원 관리
</a>
<div class="dropdown-menu" aria-labelledby="dropdown">
<a class="dropdown-item" href="userLogout.jsp">로그아웃</a>
</div>
</li>
</ul>
<form action="./index.jsp" method="get" class="form-inline my-2 my-lg-0">
<input type="text" name="search" class="form-control mr-sm-2" placeholder="내용을 입력하세요.">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">검색</button>
</form>
</div>
</nav>
<div class="container">
<div class="alert alert-warning mt-4" role="alert">
이메일 주소 인증을 하셔야 이용 가능합니다. 인증 메일을 받지 못하셨나요?
</div>
<a href="emailSendAction.jsp" class="btn btn-primary">인증 메일 다시 받기</a>
</div>
<footer class="bg-dark mt-4 p-5 text-center" style="color: #FFFFFF;">
Copyright ⓒ 2018 나동빈 All Rights Reserved.
</footer>
<!-- 제이쿼리 자바스크립트 추가하기 -->
<script src="./js/jquery.min.js"></script>
<!-- Popper 자바스크립트 추가하기 -->
<script src="./js/popper.min.js"></script>
<!-- 부트스트랩 자바스크립트 추가하기 -->
<script src="./js/bootstrap.min.js"></script>
</body>
</html>
이제 테스트하면 로그인, 로그아웃, 회원가입, 이메일 인증 및 메인 페이지에서의 세션 관리 부분까지 완전하게 동작하는 것을 확인할 수 있습니다.
'JAVA & JSP' 카테고리의 다른 글
JSP로 강의평가 웹 사이트 개발하기 ⑨ 평가 검색 및 출력 구현하기 (4) | 2018.01.27 |
---|---|
JSP로 강의평가 웹 사이트 개발하기 ⑧ 평가 등록 및 신고 구현하기 (7) | 2018.01.27 |
JSP로 강의평가 웹 사이트 개발하기 ⑥ 회원가입 및 이메일 전송하기 (22) | 2018.01.26 |
JSP로 강의평가 웹 사이트 개발하기 ⑤ 회원 데이터 모델링 (0) | 2018.01.26 |
JSP로 강의평가 웹 사이트 개발하기 ④ 데이터베이스 구축하기 (2) | 2018.01.26 |