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

[JSP] MVC MODEL2 방식 - 회원정보 삭제(deletForm)

by byeolsub 2023. 4. 19.

 📌

<%@page import="model.MemberDao"%>
<%@page import="model.Member"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- /jsp3/src/main/webapp/view/member/deleteForm.jsp --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>탈퇴 전 비밀번호 입력</title>
<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" method="post" onsubmit="return inputcheck(this)">
    <input type="hidden" name="id" value="${param.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>

 

 

📌 MemberController.java - 내용 추가

1. id 파라미터 저장하기
2. login 여부 검증하기
	 로그아웃 상태인 경우 : 로그인 하세요. 메세지 출력 후 koginForm 페이지로 이동
	 관리자가 아니면서 id 파라미터 정보와 login 정보가 다른경우 : 본인만 탈퇴 가능합니다. 메세지 출력 후 main 페이지로 이동
3. deleteForm.jsp 출력하기   

 

	@RequestMapping("deleteForm")
	public String deleteForm (HttpServletRequest request, HttpServletResponse response) {
		String id = request.getSession().getAttribute("id");
		String login = (String)request.getSession().getAttribute("login");
		if(login == null) {
			request.setAttribute("msg","로그인 하세요.");
			request.setAttribute("url","loginForm");
			return "/view/alert.jsp";
		} else if(!login.equals("admin") && !id.equals(login)) {
			request.setAttribute("msg","본인만 탈퇴 가능합니다.");
			request.setAttribute("url","main");
			return "/view/alert.jsp";
		}
		//3. deleteForm.jsp 출력하기
		return "/view/member/deleteForm.jsp";
	}

 

 

📌 MemberController.java - 내용 추가.

                                             jsp2/delete.jsp 대신 작성

@RequestMapping("delete")
	public String delete (HttpServletRequest request, HttpServletResponse response) {
		try {
			request.setCharacterEncoding("UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} 
// Unhandled exception type UnsupportedEncodingException 예외처리 해줘야 한다
//1. 파라미터 값을 변수에 저장
		 String id = request.getParameter("id");
		 String pass = request.getParameter("pass");
		 String login = (String)request.getSession().getAttribute("login");
		 String msg = null;
		 String url = null;
//2. method=POST 여부 확인.
		 if(!request.getMethod().equals("POST")) {
		    msg = "입력방식 오류입니다.";
		    url = "deleteForm?id=" + id;
		 } else if(id.equals("admin")) {
			 msg = "관리자는 탈퇴 불가능합니다.";
			 url = "list";
		 } else if(login == null) {
			 msg = "로그인 하세요.";
			 url = "loginForm";
		 } else if(!login.equals("admin") && !id.equals(login)) {
			 msg = "본인만 탈퇴 가능합니다.";
			 url = "main";
		 } else { //정상적으로 탈퇴 가능할 때
			 MemberDao dao = new MemberDao();
			 Member mem = dao.selectOne(login);
			 if(!pass.equals(mem.getPass())) { //비밀번호 오류
				 msg = "비밀번호 오류입니다.";
				 url = "deleteForm?id=" + id;
			 } else { //비밀번호 일치
				 if(dao.delete(id)) {
					 msg = id + "회원이 탈퇴 되었습니다.";
					 if(login.equals("admin")) {
						 url = "list";
					 } else { //일반 사용자
						 request.getSession().invalidate(); //로그아웃
						 url = "loginForm";
					 }
				 } else { //회원 정보 삭제시 db 오류 발생한 경우
					 msg = id + "회원 탈퇴 실패";
					 if(login.equals("admin")) { //관리자
						 url = "list";
					 } else {
						 request.getSession().invalidate(); //로그아웃
						 url = "deleteForm?id=" + id;
					 }
				 }
			 } //비밀번호 일치 if 끝
		 } //정상적인 탈퇴 끝
		    request.setAttribute("msg", msg);
		    request.setAttribute("url", url);		
		    return "/view/alert.jsp";
	 }
}