[JSP] 5. WebProject(홈페이지 만들기) - 회원 탈퇴 구현하기

2022. 8. 15. 16:29·[개발 언어 & 프레임워크]/JSP
목차
  1. [memberDeleteView.do]
  2. [memberDeleteView.jsp]
  3. [ProjectDao - deleteDo]
  4. [DeleteOkCommend]
  5. [Controller]

이번엔 회원탈퇴 페이지를 만들고 비밀번호가 일치해야 탈퇴할 수 있게끔 구현했다.


[memberDeleteView.do]

더보기

비밀번호가 일치해야 탈퇴된다!

 

(관리자는 비밀번호 없이 탈퇴할 수 있게 수정할 예정이지만 아직 수정은 안해서 관리자도 똑같이 비밀번호 입력해야 탈퇴된당...^ㅇ^)


[memberDeleteView.jsp]

<%@page import="org.project.dto.MemberDto"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
String userId =
	(String)request.getAttribute("userId");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Good Bye</title>
<link rel="stylesheet" href="css/memberDelete.css" />
</head>
<body>
	<%@include file="common/header.jsp" %>
	<div class="container">
		<div class="inner-con">
			<div class="delete">
				<form action="deleteOk.do" method="post" id="deleteForm">
					<table>
						<thead>
							<tr>
								<th>DELETE ACCOUNT</th>
							</tr>
						</thead>
						<tbody>
							<tr>
								<td>
									<label for="userId">아이디</label> <br />
									<input type="hidden" name="userId" id="userId" value="<%=userId %>"/>
									<span class="id"><%=userId %></span>
								</td>
							</tr>
							<tr>
								<td>
									<label for="userPw">비밀번호</label> <br />
									<input type="password" name="userPw" id="userPw" placeholder="비밀번호를 입력해 주세요." />
								</td>
							</tr>
						</tbody>
						<tfoot>
							<tr>
								<td>
									<input type="submit" value="회원탈퇴" id="deleteOkBtn" />
								</td>
							</tr>
						</tfoot>
					</table>
				</form>
			</div>
		</div>
	</div>
	<%@include file="common/footer.jsp" %>
</body>
</html>
/*memberDeleteView.css*/

@import url("common/reset.css");
@import url("common/header.css");
@import url("common/footer.css");
@import url('https://fonts.googleapis.com/css2?family=Nunito:wght@300&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Sunflower:wght@500&display=swap');

.container {
	width: 100%;
	height: calc(100vh - 180px);
}

.inner-con {
	width: 100%;
	height: calc(100vh - 180px);
	background-image: url("../img/ekuse6.jpg");
	background-repeat: no-repeat;
	background-size: cover;
	background-position: bottom;
	display: flex;
	justify-content: center;
}  

.delete {
	background: rgba(255, 255, 255, 0.5);
	width: 700px;
	display: flex;
  align-items: center;
  justify-content: center;
}

.delete > form > table {
	margin-left: auto;
	margin-right: auto;
	padding: 10px 10px;
	width: 500px;
	font-family: 'Sunflower', sans-serif;
	letter-spacing: 2px;
}

.delete > form > table thead tr th {
	color: white;
	text-shadow: 1px 1px 1px gray;
	font-size: 1.5em;
	line-height: 50px;
	font-family: 'Nunito', sans-serif;
}

.delete > form > table tbody label {
	line-height: 40px;
	font-size: 1.2em;
	color: #5d4037;
}

.id {
	color: #004c8c;
}

.delete > form > table tbody input {
	width: 100%;
	height: 40px;
	border: 1px solid #ddd;
	border-radius: 5px;
	padding: 2px 5px;
	margin: 2px 0px;
	font-family: 'Sunflower', sans-serif;
}

#pwch {
	color: red;
}

.pwch2 {
	color: blue !important;
}

.delete > form > table tfoot input {
	width: 100%;
	height: 40px;
	border: none;
	background-color: #7f0000;
	color: #FFFFFF;
	font-family: 'Sunflower', sans-serif;
	letter-spacing: 5px;
	font-size: 1em;
	margin-top: 5px;
}

String userId =(String)request.getAttribute("userId");

아이디는 요청한 유저에 의해 자동으로 가져와지니까 userId를 가져와서 input의 value에 넣고 여기서 입력된 비밀번호와 DB에 저장되어 있는 비밀번호를 비교해서 처리해야 한다.


[ProjectDao - deleteDo]

 

package org.project.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import org.project.dbConnect.DBConnect;
import org.project.dto.MemberDto;

//DataBase Access Object
public class ProjectDao {
	
	//싱글톤
	//클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에 객체를 만들어 사용하는 디자인 패턴
		
	//생성자를 외부에서 호출할 수 없도록  private 접근제한자
	private static class singleton {
		//정적 필드 static final => 한 번 초기값이 저장되면 변경 불가
		private static final ProjectDao INSTANCE=new ProjectDao();
	}
	
	//생성자
	private ProjectDao() {}
	
	//외부 호출이 가능(public) 정적(static) 메소드
	public static ProjectDao getInstance() {
		return singleton.INSTANCE;
	}
	
	//회원탈퇴
	public boolean deleteDo(String userId, String userPw) {
		boolean result = false;
		
		Connection conn=null;
		PreparedStatement pstm=null;
		ResultSet rs=null;
		
		String dbUserPw="";
		
		try {
			conn=DBConnect.getConnection();
			String sql="select userPw from pj_member where userId=?";
			pstm=conn.prepareStatement(sql);
			pstm.setString(1, userId);
			rs=pstm.executeQuery();
			
			if(rs.next()) {
				dbUserPw=rs.getString("userPw");
				if(dbUserPw.equals(userPw)) {
					String delSql="delete from pj_member where userId=?";
					pstm=conn.prepareStatement(delSql);
					pstm.setString(1, userId);
					pstm.executeUpdate();
					result=true;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if(conn!=null) conn.close();
				if(pstm!=null) pstm.close();
				if(rs!=null) rs.close();
			} catch (Exception e) {
				e.printStackTrace();
			} finally {}
		}
		return result;
	}
}

String sql="select userPw from pj_member where userId=?";

pstm=conn.prepareStatement(sql);

pstm.setString(1, userId);

rs=pstm.executeQuery();

첫 쿼리문을 통해서 userId=?에 해당하는 비밀번호를 ResultSet의 rs에 저장한다.

 

그리고 여기에 담겨있는 비밀번호와 요청해서 받은 비밀번호가 일치해야 탈퇴를 실행하므로 중첩 if문을 사용했다.


[DeleteOkCommend]

package org.project.commend;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.project.dao.ProjectDao;

public class DeleteOkCommend implements ExcuteCommend{

	@Override
	public void excuteQueryCommend(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("회원탈퇴 commend");
		
		String userId=request.getParameter("userId");
		String userPw=request.getParameter("userPw");
		
		ProjectDao dao=ProjectDao.getInstance();
		
		HttpSession session=request.getSession();
		String sessionId=(String)session.getAttribute("sessionId");
		
		boolean rs=dao.deleteDo(userId, userPw);
		String url="";
		if(rs==true) {
			if(sessionId.equals("admin")) {
				System.out.println("관리자권한 회원탈퇴 Ok");
				url="/memberListView.do";
			} else {
				System.out.println("회원탈퇴 Ok");
				url="/index.do";
				session.invalidate();				
			}
		} else {
			System.out.println("회원탈퇴  Fail");
			url="/index.do";	
		}
		request.setAttribute("url", url);	
	}
}

Commend에서는 관리자 권한으로 회원 탈퇴할 시 다시 회원목록 페이지로 이동하게 했고, 일반회원은 회원 탈퇴할 시 세션을 초기화하고 인덱스 페이지로 이동하게끔 했다.


[Controller]

package org.project.controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.project.commend.DeleteOkCommend;
import org.project.commend.ExcuteCommend;
import org.project.commend.JoinOkCommend;
import org.project.commend.LoginOkCommend;
import org.project.commend.LogoutCommend;
import org.project.commend.MemberViewCommend;
import org.project.commend.UpdateOkCommend;

@WebServlet("*.do")
public class Controller extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8"); //한글 인코딩(한글처리)
		
		String path=request.getContextPath(); //프로젝트 path만 얻어온다.
		// => /webProject_KM
		String uri=request.getRequestURI(); //프로젝트와 파일경로까지 얻어온다.
		// => /webProject_KM/index.do
		String basicURL=uri.substring(path.length());
		// => /index.do
		
		System.out.println(basicURL);
		
		ExcuteCommend commend=null;
		
		String url="";
		
		if(basicURL.equals("/index.do")) {
			url="/index.jsp";
		} else if(basicURL.equals("/loginView.do")) {
			url="/loginView.jsp";
		} else if(basicURL.equals("/joinView.do")) {
			url="/joinView.jsp";
		} else if(basicURL.equals("/joinOk.do")) {
			commend=new JoinOkCommend();
			commend.excuteQueryCommend(request, response);
			url=(String)request.getAttribute("url");
		} else if(basicURL.equals("/loginOk.do")) {
			commend=new LoginOkCommend();
			commend.excuteQueryCommend(request, response);
			url=(String)request.getAttribute("url");
		} else if(basicURL.equals("/logout.do")) {
			commend=new LogoutCommend();
			commend.excuteQueryCommend(request, response);
			url=(String)request.getAttribute("url");
		} else if(basicURL.equals("/admin.do")) {
			url="/admin.jsp";
		} else if(basicURL.equals("/memberListView.do")) {
			url="/memberListView.jsp";
		} else if(basicURL.equals("/memberView.do")) {
			commend=new MemberViewCommend();
			commend.excuteQueryCommend(request, response);
			url=(String)request.getAttribute("url");
		} else if(basicURL.equals("/updateOk.do")) {
			commend=new UpdateOkCommend();
			commend.excuteQueryCommend(request, response);
			url=(String)request.getAttribute("url");
		} else if(basicURL.equals("/deleteOk.do")) {
			commend=new DeleteOkCommend();
			commend.excuteQueryCommend(request, response);
			url=(String)request.getAttribute("url");
		} else if(basicURL.equals("/memberDeleteView.do")) {
			String userId=request.getParameter("userId");
			request.setAttribute("userId", userId);
			url="/memberDeleteView.jsp";
		}

		RequestDispatcher disp=request.getRequestDispatcher(url);
		disp.forward(request, response); //해당 ViewPage로 포워딩

	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8"); 
		doGet(request, response);
	}

}

그리고 이게 최종적으로 완성된 프로젝트의 컨트롤러.

지금까진 구현된데 까지만 남겨놓고 지웠는데 마지막 회원탈퇴까지 구현해서 최종 컨트롤러는 요렇다.


이제 막 학원 다니면서 3개월 배우고 얼추 나름의 기능을 담은 첫 웹 프로젝트라 뿌듯하고 재밌었다!

이제 포트폴리오 준비해야하는데 뭘 만들어야할지 모르겠다 허엉....

'[개발 언어 & 프레임워크] > JSP' 카테고리의 다른 글

[JSP/Servlet] HttpServletRequest, HttpServletResponse 객체 이해하기  (0) 2022.11.28
[JSP] 4. WebProject(홈페이지 만들기) - 회원 상세 조회하기, 회원정보 수정하기  (0) 2022.08.15
[JSP] 3. WebProject(홈페이지 만들기) - 회원목록 조회하기  (0) 2022.08.15
[JSP] 2. WebProject(홈페이지 만들기) - 로그인 구현하기  (0) 2022.08.11
[JSP] 1. WebProject(홈페이지 만들기) - 회원가입 구현하기  (0) 2022.08.09
  1. [memberDeleteView.do]
  2. [memberDeleteView.jsp]
  3. [ProjectDao - deleteDo]
  4. [DeleteOkCommend]
  5. [Controller]
'[개발 언어 & 프레임워크]/JSP' 카테고리의 다른 글
  • [JSP/Servlet] HttpServletRequest, HttpServletResponse 객체 이해하기
  • [JSP] 4. WebProject(홈페이지 만들기) - 회원 상세 조회하기, 회원정보 수정하기
  • [JSP] 3. WebProject(홈페이지 만들기) - 회원목록 조회하기
  • [JSP] 2. WebProject(홈페이지 만들기) - 로그인 구현하기
Rizy
Rizy
비전공자의 좌충우돌 개발 일기 ٩(๑′∀ ‵๑)۶•*¨*•.¸¸♪
Rizy
Rizy's Devlog
Rizy
전체
오늘
어제
| 글쓰기 | | 관리자 |
  • 분류 전체보기 (73)
    • [IT 지식] (24)
      • 컴퓨터과학 (11)
      • 알고리즘 (6)
      • 개발 언어 & 프레임워크 (0)
      • 개발 도구 & 개발 환경 (5)
    • [개발 언어 & 프레임워크] (41)
      • Ruby on Rails (2)
      • HTML & CSS (2)
      • React (6)
      • JavaScript (3)
      • JAVA (1)
      • JSP (7)
      • PHP (3)
      • SQL (11)
      • Python (6)
    • [자기계발] (7)
      • 회고 (0)
      • 일본어 (0)
      • 자격증 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
Rizy
[JSP] 5. WebProject(홈페이지 만들기) - 회원 탈퇴 구현하기

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.