
어제의 실습 이어서 작성
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);
}
}
}
<%@ 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"}
<%
}
%>
<%@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>
<%
}
%>
<%@ 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>
<%@ page language="java" contentType="text/plain; charset=UTF-8"
pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%>
<%
// 로그아웃
session.invalidate();
response.sendRedirect("main.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>
<%
}
%>
<%@ 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>
<%
}
%>
<%@ 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>
<%
}
%>
<%@ 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>
<%
}
}
%>
<%@ 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>
<%
}
%>
