[구디아카데미][IT국비지원][TIL] DB, 세션을 이용한 로그인 구현

Seokhyun Jeong·2023년 5월 2일
0

과제

목록 보기
19/19
post-thumbnail

[구디아카데미][IT국비지원]

코드

Member.java

package vo;

public class Member {
	public String memberId;
	public String memberPw;
	public String createdate;
	public String updatedate;
}

home.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>home</title>
	<!-- Latest compiled and minified CSS -->
	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
	
	<!-- Latest compiled JavaScript -->
	<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
	<div>
		<%
		// request.getRequestDispatcher("/inc/mainmenu.jsp").include(request, response);
		// 위 코드를 액션태그로 변경
		%>
		<div class="container">
			<jsp:include page="/inc/mainmenu.jsp"></jsp:include>
		</div>
		
		<div class="container">
			<!-- home 내용 : 로그인 폼/ 카테고리별 게시글 5개씩 -->
			<!-- 로그인 폼 -->
			<%
				if(session.getAttribute("loginMemberId") == null) {	// 로그인 정보가 없다면 로그인 폼 표시
			%>
				<form action="<%=request.getContextPath() %>/member/loginAction.jsp" method="post">
					<table class="table table-bordered">
						<tr>
							<td class="table-dark">아이디</td>
							<td><input type="text" name="memberId"></td>
						</tr>
						<tr>
							<td class="table-dark">패스워드</td>
							<td><input type="password" name="memberPw"></td>
						</tr>
					</table>
					<button type="submit">로그인</button>
				</form>
			<%	
				}
			%>
			<!-- 카테고리별 게시글 5개씩 -->
		</div>
		
		<div class="container">
			<!-- include 페이지 : Copyright &copy; 구디아카데미 -->
			<jsp:include page="/inc/copyright.jsp"></jsp:include>
		</div>
	</div>
</body>
</html>

loginAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.net.*" %>
<%@ page import="java.util.*" %>
<%@ page import="vo.*" %>
<%
	// 세션 유효성 검사
	if(request.getAttribute("loginMemberId") != null) {
		response.sendRedirect(request.getContextPath()+"/home.jsp");
		return;
	}	
	// 요청값 유효성 검사
		
	String memberId = request.getParameter("memberId");
	String memberPw = request.getParameter("memberPw");
	// 요청값 디버깅
	System.out.println(memberId + " <-- loginAction parameter memberId");
	System.out.println(memberPw + " <-- loginAction parameter memberPw");
	
	// 요청값 객체에 묶어서 저장
	Member paramMember = new Member();
	paramMember.memberId = memberId;
	paramMember.memberPw = memberPw;
	// 객체 디버깅
	System.out.println(paramMember.memberId + " <-- loginAction paramMember memberId");
	System.out.println(paramMember.memberPw + " <-- loginAction paramMember memberPw");
	// db 접속
	String driver = "org.mariadb.jdbc.Driver";
	String dburl = "jdbc:mariadb://127.0.0.1:3306/userboard";
	String dbuser = "root";
	String dbpw = "java1234";
	Class.forName(driver);
	Connection conn = null;
	PreparedStatement stmt = null;
	ResultSet rs = null;
	conn = DriverManager.getConnection(dburl, dbuser, dbpw);
	// sql 전송
	String sql = "SELECT member_id memberId FROM member WHERE member_id=? AND member_pw=PASSWORD(?)";
	stmt = conn.prepareStatement(sql);
	stmt.setString(1, paramMember.memberId);
	stmt.setString(2, paramMember.memberPw);
	// sql 디버깅
	System.out.println(stmt + " <-- loginAction sql");
	// 전송한 sql 실행값 반환
	rs = stmt.executeQuery();
	
	if(rs.next()){
		// 세션에 로그인 정보 저장
		session.setAttribute("loginMemberId", rs.getString("memberId"));
		System.out.println("로그인 성공 세션정보 : " + session.getAttribute("loginMemberId"));
	} else {
		System.out.println("로그인 실패"); 
	}
	
	response.sendRedirect(request.getContextPath() + "/home.jsp?");
%>

logoutAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	// 기존 세션을 지우고 갱신(초기화)
	session.invalidate();
	response.sendRedirect(request.getContextPath() + "/home.jsp");
%>

insertMemberForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>insertMemberForm</title>
	<!-- Latest compiled and minified CSS -->
	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
	
	<!-- Latest compiled JavaScript -->
	<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
	<%
		// 세션 유효성 검사
		if(session.getAttribute("loginMemberId") != null) {
			response.sendRedirect(request.getContextPath()+"/home.jsp");
			return;
		}
	%>
	<div class="container">
		<h1>회원가입</h1>
		<form action="<%=request.getContextPath() %>/member/insertMemberAction.jsp" method="post">
			<table class="table table-bordered">
				<tr>
					<td class="table-dark">아이디</td>
					<td><input type="text" name="memberId"></td>
				</tr>
				<tr>
					<td class="table-dark">패스워드</td>
					<td><input type="password" name="memberPw"></td>
				</tr>
			</table>
			<button type="submit">회원가입</button>
		</form>
	</div>
	<div class="container">
		<!-- include 페이지 : Copyright &copy; 구디아카데미 -->
		<jsp:include page="/inc/copyright.jsp"></jsp:include>
	</div>
</body>
</html>

insertMemberAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.net.*" %>
<%@ page import="vo.*" %>
<%
	//세션 유효성 검사
	if(session.getAttribute("loginMemberId") != null) {
		response.sendRedirect(request.getContextPath()+"/home.jsp");
		return;
	}
	//요청값 유효성 검사
	if(request.getParameter("memberId").equals("")			// 아이디나 패스워드가 공백일때 회원가입 폼으로 가라
		||request.getParameter("memberPw").equals("")) {
		response.sendRedirect(request.getContextPath()+"/member/insertMemberForm.jsp");
		return;
	}
	String memberId = request.getParameter("memberId");
	String memberPw = request.getParameter("memberPw");
	// 요청값 디버깅
	System.out.println(memberId + " <-- insertMemberAction parameter memberId");
	System.out.println(memberId + " <-- insertMemberAction parameter memberPw");
	
	// 요청값 객체에 묶어서 저장
	Member paramMember = new Member();
	paramMember.memberId = memberId;
	paramMember.memberPw = memberPw;
	// 객체 디버깅
	System.out.println(paramMember.memberId + " <-- insertMemberAction paramMember memberId");
	System.out.println(paramMember.memberPw + " <-- insertMemberAction paramMember memberPw");
	// db 접속
	String driver = "org.mariadb.jdbc.Driver";
	String dburl = "jdbc:mariadb://127.0.0.1:3306/userboard";
	String dbuser = "root";
	String dbpw = "java1234";
	Class.forName(driver);
	Connection conn = null;
	PreparedStatement stmt = null;
	ResultSet rs = null;
	conn = DriverManager.getConnection(dburl, dbuser, dbpw);
	// sql 전송
	String sql = "INSERT INTO member(member_id, member_pw, createdate, updatedate) VALUES (?, PASSWORD(?), NOW(), NOW())";
	stmt = conn.prepareStatement(sql);
	stmt.setString(1, paramMember.memberId);
	stmt.setString(2, paramMember.memberPw);
	// sql 디버깅
	System.out.println(stmt + " <-- insertMemberAction sql");
	// sql 실행 시 영향받는 행의 수 반환
	int row = stmt.executeUpdate();
	
	if(row == 1){ // 회원가입 성공
		System.out.println("회원가입 성공");
	} else { 	// 회원가입 실패
		// 1. row == 0 -> 아이디 중복
		// 2. row > 1 -> sql 오류? rollback
		System.out.println("회원가입 실패"); 
	}
	
	response.sendRedirect(request.getContextPath() + "/home.jsp?");
%>

결과화면

홈(로그인전)

홈(로그인후)

회원가입

0개의 댓글