TIL 0430

먼지·2024년 4월 30일
0

Today I Learned

목록 보기
51/89
post-thumbnail

[실습] Member

어제의 실습 이어서 작성

MemberDAO

package kr.member.dao;

import java.lang.reflect.Member;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import kr.member.vo.MemberVO;
import kr.util.DBUtil;

public class MemberDAO {
	/*
	 * 싱글턴 패턴은 생성자 private으로 지정해서 외부에서 호출할 수 없도록 처리하고 
	 * static 메서드를 호출해서 객체가 한번만 생성되고
	 * 생성된 객체를 공유할 수 있도록 처리하는 방식을 의미한다.
	 */
	private static MemberDAO instance = new MemberDAO();

	public static MemberDAO getInstance() {
		return instance;
	}

	private MemberDAO() {
	}

//  회원 가입
	public void insertMember(MemberVO member) throws Exception {
		Connection conn = null;
		PreparedStatement pstmt = null;
		String sql = null;
		try {
			conn = DBUtil.getConnection();
			sql = "INSERT INTO smember(num,id,name,passwd,email,phone) VALUES(smember_seq.nextval,?,?,?,?,?)";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, member.getId());
			pstmt.setString(2, member.getName());
			pstmt.setString(3, member.getPasswd());
			pstmt.setString(4, member.getEmail());
			pstmt.setString(5, member.getPhone());
			pstmt.executeUpdate();

		}catch(Exception e) {
			throw new Exception(e);
		}finally {
			DBUtil.executeClose(null, pstmt, conn);
		}
	}

//	 회원 상세 정보
	public MemberVO getMember(int num) throws Exception {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		MemberVO member = null;
		String sql = null;
		try {
			conn=DBUtil.getConnection();
			sql="SELECT * FROM smember WHERE num=?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, num);
			rs = pstmt.executeQuery();
			
			if(rs.next()) {
				member = new MemberVO();
				member.setNum(rs.getInt("num"));
				member.setId(rs.getString("id"));
				member.setPasswd(rs.getString("passwd"));
				member.setName(rs.getString("name"));
				member.setEmail(rs.getString("email"));
				member.setPhone(rs.getString("phone"));
				member.setReg_date(rs.getDate("reg_date"));
			}
		} catch (Exception e) {
			throw new Exception(e);
		}finally {
			DBUtil.executeClose(rs, pstmt, conn);
		}
		return member;
	}

//	 아이디 중복 체크, 로그인 체크
	public MemberVO checkMember(String id) throws Exception {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		MemberVO member = null;
		String sql = null;
		
		try {
			conn = DBUtil.getConnection();
			sql="SELECT * FROM smember WHERE id=?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, id);
			rs = pstmt.executeQuery();
			if(rs.next()) {
				member = new MemberVO();
				member.setId(rs.getString("id"));
				member.setNum(rs.getInt("num"));
				member.setPasswd(rs.getString("passwd"));
			}
		}catch (Exception e) {
			throw new Exception(e);
		}finally {
			DBUtil.executeClose(rs, pstmt, conn);
		}
		
		return member;
	}

//	회원 정보 수정
	public void updateMember(MemberVO member) throws Exception {
		Connection conn = null;
		PreparedStatement pstmt = null;
		String sql =null;
		try {
			conn = DBUtil.getConnection();
			sql = "UPDATE smember SET name=?, passwd=?, email=?, phone=? WHERE num=?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, member.getName());
			pstmt.setString(2, member.getPasswd());
			pstmt.setString(3, member.getEmail());
			pstmt.setString(4, member.getPhone());
			pstmt.setInt(5, member.getNum());
			pstmt.executeUpdate();
		} catch (Exception e) {
			throw new Exception(e);
		}finally {
			DBUtil.executeClose(null, pstmt, conn);
		}
	}

//	회원 탈퇴(정보 삭제)
	public void deleteMember(int num) throws Exception {
		Connection conn = null;
		PreparedStatement pstmt = null;
		String sql =null;
		try {
			conn = DBUtil.getConnection();
			sql = "DELETE FROM smember WHERE num=?";
			pstmt=conn.prepareStatement(sql);
			pstmt.setInt(1, num);
			pstmt.executeUpdate();
		} catch (Exception e) {
			throw new Exception(e);
		}finally {
			DBUtil.executeClose(null, pstmt, conn);
		}
	}
}

ID 중복 확인

<%@ page language="java" contentType="text/plain; charset=UTF-8"
	pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%>
<%@ page import="kr.util.DBUtil"%>
<%@ page import="kr.member.dao.MemberDAO"%>
<%@ page import="kr.member.vo.MemberVO"%>
<%
	//전송된 데이터 인코딩 타입 지정
	request.setCharacterEncoding("UTF-8");
	// 전송된 데이터 반환
	String id = request.getParameter("id");
	
	MemberDAO dao = MemberDAO.getInstance();
	MemberVO member = dao.checkMember(id);
	if(member!=null){// 아이디 중복되었음
%>
	{"result" : "idDuplicated"}
<%
	}else{	// 아이디 미중복
%>
	{"result":"idNotFound"}
<%	
	}
%>

회원 로그인 JSP

<%@page import="oracle.net.aso.m"%>
<%@ page language="java" contentType="text/plain; charset=UTF-8"
    pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%>
<%@ page import="kr.util.DBUtil"%>
<%@ page import="kr.member.dao.MemberDAO"%>
<%@ page import="kr.member.vo.MemberVO"%>
<%
	//전송된 데이터 인코딩 타입 지정
	request.setCharacterEncoding("utf-8");
	// 전송된 데이터 반환
	String id = request.getParameter("id");
	String passwd = request.getParameter("passwd");
	
	MemberDAO dao = MemberDAO.getInstance();
	// 아이디 존재 여부 확인
	MemberVO member = dao.checkMember(id);
	boolean check = false;
	
	if(member != null){ // id 존재
		// 사용자가 입력한 비밀번호와 table에 저장된 비밀번호 일치 여부 확인
		check = member.isCheckedPassword(passwd);
	}
	
	if(check){ // 인증 성공
		// 로그인 처리
		session.setAttribute("user_num", member.getNum());
		session.setAttribute("user_id", member.getId());
		
		// main.jsp로 리다이렉트
		response.sendRedirect("main.jsp");
	}else{ // 인증 실패

%>
	<script type="text/javascript">
	alert('아이디 또는 비밀번호가 불일치합니다.')
	history.go(-1);
	</script>
<%
	
	}
%>

회원 로그인 Form

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 폼</title>
<link rel="stylesheet" href="<%= request.getContextPath() %>/css/style.css">
<script type="text/javascript" src="<%= request.getContextPath() %>/js/jquery-3.7.1.min.js"></script>
<script type="text/javascript">
 $(function(){
	// 이벤트 연결
	$('#login_form').submit(function(){
		if($('#id').val().trim()==''){
			alert('ID를 입력하세요.');
			$('#id').val('').focus();
			return false;
		};
			
		if($('#passwd').val().trim()==''){
			alert('PW를 입력하세요.');
			$('#passwd').val('').focus();
			return false;
		};
		
	});
 });
</script>
</head>
<body>
	<div class="page-main">
	<h1>로그인</h1>
		<form action="login.jsp" method="post" id="login_form">
		<ul>
			<li>
				<label for="id">아이디</label>
				<input type="text" name="id" id="id" maxlength="12">
			</li>
			<li>
				<label for="passwd">비밀번호</label> 
				<input type="password"name="passwd" id="passwd" maxlength="12">
			</li>
			</ul>
			<div class="align-center">
				<input type="submit" value="LogIn">
				<input type="button" value="Home" onclick="location.href='main.jsp'">
			</div>
		</form>
	</div>
</body>
</html>

회원 로그아웃 JSP

<%@ page language="java" contentType="text/plain; charset=UTF-8"
    pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%>
<%
	// 로그아웃
	session.invalidate();
	response.sendRedirect("main.jsp");
%>

회원 마이페이지 JSP

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ page import="kr.member.dao.MemberDAO"%>
<%@ page import="kr.member.vo.MemberVO"%>
<%
	Integer user_num = (Integer)session.getAttribute("user_num");
	if(user_num==null){ // 로그인 되지 않은 경우
		response.sendRedirect("loginForm.jsp");
		return;
	}else{ // 로그인 된 경우
%>
	<!DOCTYPE html>
	<html>
	<head>
	<meta charset="UTF-8">
	<title>회원 상세 정보</title>
	<link rel="stylesheet" href="<%= request.getContextPath() %>/css/style.css">
	</head>
	<body>
	<%
		MemberDAO dao = MemberDAO.getInstance();
		MemberVO member = dao.getMember(user_num);
		
		if(member.getPhone() == null){
			member.setPhone("");
		}
	%>
	<div class="page-main">
		<h1>회원 정보</h1>
		<ul>
			<li>아이디 : <%= member.getId() %></li>
			<li>이름 : <%= member.getName() %></li>
			<li>이메일 : <%= member.getEmail() %></li>
			<li>전화번호 : <%= member.getPhone() %></li>
			<li>가입일 : <%=member.getReg_date() %></li>
		</ul>
		<hr size="1" width="100%" noshade="noshade">
		<div class="align-right">
			<input type="button" value="Member Update" onclick="location.href='modifyUserForm.jsp'">
			<input type="button" value="Delete Account" onclick="location.href='deleteUserForm.jsp'">
			<input type="button" value="Home" onclick="location.href='main.jsp'">
		</div>
	</div>
	</body>
	</html>
<%
	}
%>

회원 정보 수정 JSP

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="kr.member.dao.MemberDAO"%>
<%@ page import="kr.member.vo.MemberVO"%>
<%
	Integer user_num = (Integer) session.getAttribute("user_num");
	if(user_num==null){ // 로그인 되지 않은 경우
		response.sendRedirect("loginForm.jsp");
	} else{ // 로그인 된 경우
		request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="member" class="kr.member.vo.MemberVO"/>
<jsp:setProperty property="*" name="member"/>
<%
	//num이 전송되지 않았기 때문에 session에 저장된 num을 사용
	member.setNum(user_num);
	MemberDAO dao = MemberDAO.getInstance();
	dao.updateMember(member);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 정보 수정 완료</title>
<link rel="stylesheet" href="<%= request.getContextPath() %>/css/style.css">
</head>
<body>
	<div class="page-main">
	<h1>회원 정보 수정 완료</h1>
		<div class="result-display">
			<div class="align-center">
				회원 정보 수정이 완료되었습니다.<p>
				<input type="button" class="button" value="MyPage" onclick="location.href='myPage.jsp'">
			</div>
		</div>
	</div>
</body>
</html>

<%
	}
%>

회원 정보 수정 Form

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="kr.member.dao.MemberDAO"%>
<%@ page import="kr.member.vo.MemberVO"%>
<%
	Integer user_num = (Integer) session.getAttribute("user_num");
	if(user_num==null){ // 로그인 되지 않은 경우
		response.sendRedirect("loginForm.jsp");
	} else{ // 로그인 된 경우
%>
	<!DOCTYPE html>
	<html>
	<head>
	<meta charset="UTF-8">
	<title>회원 정보 수정</title>
<link rel="stylesheet" href="<%= request.getContextPath() %>/css/style.css">
<script type="text/javascript" src="<%= request.getContextPath() %>/js/jquery-3.7.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
	$('#modify_form').submit(function(){
	    const items = document.querySelectorAll('.input-check');
	    for(let i = 0; i < items.length; i++){
	        if(items[i].value.trim() == ''){
	            const label = document.querySelector('label[for="'+items[i].id+'"]');
	            alert(label.textContent + ' 항목은 필수 입력');
	            
	            items[i].value = '';
	            items[i].focus();
	            return false;
	        }
	        if(items[i].id == 'id' && count == 0){
	            alert('ID 중복 체크는 필수입니다.');
	            return false;
	        }
	    } // end of for
	});
});
</script>
	</head>
	<body>
	<%
	MemberDAO dao = MemberDAO.getInstance();
	MemberVO member = dao.getMember(user_num);

	if (member.getPhone() == null) {
		member.setPhone("");
	}
	%>
	<div class="page-main">
		<h1>회원 정보 수정</h1>
		<form action="modifyUser.jsp" method="post" id="modify_form">
			<ul>
				<li>
					<label for="name">이름</label>
					<input type="text" name="name" id="name" class="input-check" maxlength="10" value="<%= member.getName()%>">
				</li>
				<li>
					<label for="passwd">비밀번호</label>
					<input type="password" name="passwd" id="passwd" class="input-check" maxlength="12">
				</li>
				<li>
					<label for="email">이메일</label>
					<input type="email" name="email" id="email" class="input-check" maxlength="50" value="<%= member.getEmail()%>">
				</li>
				<li>
					<label for="phone">전화번호</label>
					<input type="text" name="phone" id="phone" maxlength="15" value="<%= member.getPhone()%>">
				</li>
			</ul>
			<div class="align-center">
				<input type="submit" value="Modify">
				<input type="button" value="Home" onclick="location.href='main.jsp'">
			</div>
		</form>
	</div>
	</body>
	</html>
<%
	}
%>

회원 탈퇴 JSP

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ page import="kr.member.dao.MemberDAO"%>
<%@ page import="kr.member.vo.MemberVO"%>
<%
	String user_id = (String)session.getAttribute("user_id");
	if(user_id==null){ // 로그인 되지 않은 경우
		response.sendRedirect("loginForm.jsp");
	} else{ // 로그인 된 경우
		// 전송된 인코딩 타입 지정
		request.setCharacterEncoding("utf-8");
		// 전송된 데이터 반환
		String id = request.getParameter("id");
		String passwd = request.getParameter("passwd");

		MemberDAO dao = MemberDAO.getInstance();
		MemberVO member = dao.checkMember(id);
		boolean check = false;
		// 아이디가 등록되어 있고, 로그인한 아이디와 일치할 경우
		if(member!=null && user_id.equals(id)){
			// 비밀번호 일치 여부 체크
			check = member.isCheckedPassword(passwd);
		}
		if(check){ // 인증 성공
			// 회원 정보 삭제
			dao.deleteMember(member.getNum());
			//로그 아웃
			session.invalidate();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 탈퇴 완료</title>
<link rel="stylesheet" href="<%= request.getContextPath() %>/css/style.css">
</head>
<body>
	<div class="page-main">
	<h1>회원 탈퇴 완료</h1>
		<div class="result-display">
			<div class="align-center">
				회원 탈퇴가 완료되었습니다.<p>
				<input type="button" class="button" value="Home" onclick="location.href='main.jsp'">
			</div>
		</div>
	</div>
</body>
</html>
<%
	}else{
%>
<script type="text/javascript">
	alert('아이디 또는 비밀번호가 불일치 합니다.');
	history.go(-1);
</script>
<%		
	}
}
%>

회원 탈퇴 Form

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	Integer user_num = (Integer)session.getAttribute("user_num");
	if(user_num==null){ // 로그인 되지 않은 경우
		response.sendRedirect("loginForm.jsp");
		return;
	}else{ // 로그인 된 경우
%>

	<!DOCTYPE html>
	<html>
	<head>
	<meta charset="UTF-8">
	<title>회원 탈퇴</title>
	<link rel="stylesheet" href="<%= request.getContextPath() %>/css/style.css">
	<script type="text/javascript" src="<%= request.getContextPath() %>/js/jquery-3.7.1.min.js"></script>
	<script type="text/javascript">
	$(function() {
		// 이벤트 연결
		$('#delete_form').submit(function () {
			if($('#id').val().trim()==''){
				alert('아이디를 입력하세요');
				$('#id').val('').focus();
				return false;
			}	
			if($('#passwd').val().trim()==''){
				alert('비밀번호를 입력하세요');
				$('#passwd').val('').focus();
				return false;
			}
			if($('#cpasswd').val().trim()==''){
				alert('비밀번호 확인란을 입력하세요');
				$('#cpasswd').val('').focus();
				return false;
			}
			//비밀번호와 비밀번호 확인 일치 여부
			if($('#passwd').val() != $('#cpasswd').val()){
				alert('비밀번호와 비밀번호 확인이 불일치합니다.');
				$('#cpasswd').val('').focus();
				return false;
			} 
		});
	});
	
	</script>
	</head>
	<body>
	<div class="page-main">
		<h1>회원 탈퇴</h1>
		<form action="deleteUser.jsp" id="delete_form" method="post">
			<ul>
				<li>
					<label for="id">ID</label>
					<input type="text" id="id" name="id" maxlength="12">
				</li>
				<li>
					<label for="passwd">PW</label>
					<input type="password" id="passwd" name="passwd" maxlength="12">
				</li>
				<li>
					<label for="passwd">PW Check</label>
					<input type="password" id="cpasswd" maxlength="12">
				</li>
			</ul>
				<div class="align-center">
					<input type="submit" value="Delete Account">
					<input type="button" value="Home" onclick="location.href='main.jsp'">
				</div>
		</form>
	</div>
	</body>
	</html>
<%
	}
%>

profile
Lucky Things🍀

0개의 댓글