본문 바로가기
수업(국비지원)/JSP

[JSP] MVC MODEL1 방식 - 회원 탈퇴,정보삭제(DeleteForm , Delete)

by byeolsub 2023. 4. 19.

📌 DeleteForm

<%-- /jsp2/src/main/webapp/model1/member/deleteForm.jsp 
    1. id 파라미터 저장하기
    2. login 여부 검증하기
       - 로그아웃 상태인 경우 : 로그인하세요. 메세지 출력 후 loginForm.jsp 페이지로 이동
       - 관리자가 아니면서 id 파라미터 정보와 login 정보가 다른 경우 : 본인만 탈퇴 가능합니다. 메세지 출력 후 main.jsp페이지로 이동
    3. 현재화면 출력하기      
--%>   

 

<%@page import="model.MemberDao"%>
<%@page import="model.Member"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%> 
<%  
//1. id 파라미터 저장하기
  String id = request.getParameter("id");
//2. login 정보 조회
  String login = (String)session.getAttribute("login"); //login : login된 아이디 정보 값. 
      if(login == null) { //로그아웃 상태 %>
<script type="text/javascript">
    alert("로그인 하세요.")
    location.href="loginForm.jsp"
</script>
<%-- 3. login 정보 조회2 
        로그인 상태. 관리자가 아니고 내 정보가 아닌경우. --%>  
<% } else if(!login.equals("admin") && ! id.equals(login)) { %> 
<script type="text/javascript">
   alert("본인만 탈퇴 가능합니다..")
   location.href="main.jsp"
</script>
<% } else { %>  
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>탈퇴 전 비밀번호 입력</title>
<link rel="stylesheet" href="../../css/main.css">
<script type="text/javascript">
     function inputcheck(f) {
    	 if(f.pass.value == "") {
    		 alert("비밀번호를 입력하세요.")
    		 f.pass.focus()
    		 return false
    	 }
     }
</script>
</head>
<body>
<%-- method="post" : post 방식이면 body 전문 안쪽에 들어가서 우리가 확인 불가. --%>
<form action="delete.jsp" method="post" onsubmit="return inputcheck(this)">
    <input type="hidden" name="id" value="<%=id %>">
<table><caption>회원 비밀번호 입력</caption>
<tr><th>비밀번호</th><td><input type="password" name="pass"/></td></tr>
<tr><td colspan="2"><input type="submit" value="탈퇴하기"/></td></tr>
</table></form>    
</body>
</html>
<% } %>

 


 

 📌 Delete

<%--/jsp2/src/main/webapp/model1/member/delete.jsp
	1. 파라미터값 변수에 저장.
	2. method=POST 여부 확인. why? deletForm에서 가져오는지 확인위함.
	3. id가 관리자인 경우 탈퇴 불가.
	4. 비밀번호 검증
		관리자가 강제 탈퇴인 경우 : 관리자비밀번호
		본인 탈퇴인 경우 		: 본인 비밀번호
		비밀번호 불일치 : 비밀번호 오류 메세지 출력 후 deleteForm.jsp 페이지 이동
	5. 비밀번호 일치하는 경우 
		boolean MemberDao().delete(id) 메소드 호출
		회원정보 삭제 성공 :
			일반 사용자 : 로그아웃 실행.
						탈퇴 성공 메세지 출력. loginForm.jsp 페이지로 이동
			관리자 : 탈퇴 성공 메세지 출력. list.jsp 페이지로 이동
		회원정보 삭제 실패 : 
			일반 사용자 : 탈퇴 실패 메세지 출력. info.jsp 페이지로 이동
			관리자 : 탈퇴 실패 메세지 출력. list.jsp 페이지로 이동
			
 --%>

 

<%@page import="model.Member"%>
<%@page import="model.MemberDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
//1. 파라미터값 변수에 저장.
  String id = request.getParameter("id");
  String pass = request.getParameter("pass");
  String login = (String)session.getAttribute("login");
//2. method=POST 여부 확인. why? deletForm에서 가져오는지 확인위함.
//deleteForm에서 form method = "post" 방식 임을 확인 가능.
//권한 화면단에서 넘어오기때문에 request가 가지고있다.
	String msg = null;
	String url = null;
  if(!request.getMethod().equals("POST")) {
	  msg = "입력방식이 오류입니다.";
	  url = "deleteForm.jsp?id="+id;
//3. id가 관리자인 경우 탈퇴 불가. list.jsp 페이지로 이동
  } else if (id.equals("admin")) {
	  msg= "관리자는 탈퇴 불가합니다.";
	  url = "list.jsp";
//post방식으로 처리하게끔 설정했지만 그게 아닌경우 3-1,3-2로 해야함.
//3-1. 로그아웃 상태인 경우 오류검증 
  } else if (login == null) {
	  msg = "로그인 하세요";
	  url = "loginForm.jsp";
//3-2. 본인 탈퇴 검증
  } else if (!login.equals("admin")&& !id.equals(login)) {
	  msg = "본인만 탈퇴 가능합니다.";
	  url = "main.jsp";
  } else { //입력값 검증
	  MemberDao dao = new MemberDao();
	  Member mem = dao.selectOne(login);	 
//4. 비밀번호 검증
	if(!pass.equals(mem.getPass())) {
		msg = "비밀번호 오류";
		url = "deleteForm.jsp?id="+id;
	} else { //비밀번호 일치
//5.비밀번호 일치하는 경우
		if(dao.delete(id)) {
			msg = id + "회원이 탈퇴 되었습니다.";
			if(login.equals("admin")) { //관리자
				url= "list.jsp";
			} else { //일반 사용자
				session.invalidate();
				url= "loginForm.jsp";
			} 
		} else { 
			msg = id + "회원 탈퇴 실패";
			if(login.equals("admin")) { //관리자
					url= "list.jsp";
			} else { //일반 사용자
				session.invalidate();
				url= "loginForm.jsp";
			}
		}
	}
}
%>
<script type="text/javascript">
	alert("<%=msg%>")
	location.href="<%=url %>"
</script>

 

 

📌 MemberDao.java 에 내용추가

public boolean delete(String id) {
		Connection conn = DBConnection.getConnection();
		PreparedStatement pstmt = null;
		try {
			pstmt = conn.prepareStatement("delete from member where id=?");
			pstmt.setString(1, id);
			return pstmt.executeUpdate() >0;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DBConnection.close(conn, pstmt, null);
		}
		return false;
	}