💡 핵심 요약 (TL;DR)
Servlet쇼핑몰6: 회원탈퇴의 동작 원리를 이해하고 실제 프로젝트에 적용하기 위한 실무 가이드다.
* 회원삭제 가상경로 설정을 적용할 수 있다.
main.jsp 생성
<input type="button" value="회원탈퇴" class="btn" onclick="location.href='./MemberDelete.me'">로 href속성 변경하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <%//1.한글처리, 파라미터 request.setCharacterEncoding("UTF-8"); String id = (String) session.getAttribute("id");//object를 string으로 다운캐스팅 String name = request.getParameter("name"); //1-1. id없이는 진입불가, id없는 경우 로그인페이지로 이동. 가상주소로 이동 if(id == null){ response.sendRedirect("./MemberLogin.me"); } %> <h3 > 아이디: <%=id %></h3 > <h3 > 아이디(session-EL표현식) : ${ sessionScope.id } </h3 > <input type ="button" value ="ITWILL게시판가기" class ="btn" onclick ="location.href='../board/boardList.jsp'" > <input type ="button" value ="회원정보조회" class ="btn" onclick ="location.href='./MemberInfo.me'" > <input type ="button" value ="회원정보수정" class ="btn" onclick ="location.href=''" > <input type ="button" value ="로그아웃" class ="btn" onclick ="location.href='./MemberLogout.me'" > <input type ="button" value ="회원탈퇴" class ="btn" onclick ="location.href='./MemberDelete.me'" > <% if(id != null){ if(id.equals("admin")){ %> <input type ="button" value ="회원전체목록(관리자용)" class ="btn" onclick ="location.href=''" > <% } } %>
MemberFrontController.java의 doProcess()메서드 추가 코드작성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 }else if (command.equals("/MemberDelete.me" )){ System.out.println("@@@@ Controller : 가상주소 /MemberDelete.me 실제주소: ./member/deleteForm.jsp" ); forward = new ActionForward (); forward.setPath("./member/deleteForm.jsp" ); forward.setRedirect(false ); }else if (command.equals("/MemberDeleteAction.me" )){ action = new MemberDeleteAction (); try { forward = action.execute(req, resp); } catch (Exception e){ e.printStackTrace(); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <% // 로그인 처리 -> 로그인 x (로그인페이지 이동) String id = (String) session.getAttribute("id"); if( id == null ){ response.sendRedirect("./MemberLogin.me"); } // 회원 비밀번호만 입력받아서 deletePro.jsp페이지 이동후 삭제 // 비밀번호와 db 비밀번호 일치 -> 삭제하면안됨 비번이 같은 회원이 있을 수 있음 // 따라서 %> <fieldset > <legend > 회원탈퇴</legend > <form action ="./MemberDeleteAction.me" method ="post" > 아이디 : <input type ="hidden" name ="id" value ="<%=id %>" readonly > <br > 비밀번호 : <input type ="password" name ="pw" > <br > <input type ="submit" class ="btn" value ="탈퇴하기" > <input type ="button" class ="btn" value ="뒤로가기" onclick ="location.href='./Main.me'" > </form > </fieldset > </body > </html >
MemberDeleteAction.java 생성1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 public class MemberDeleteAction implements Action { @Override public ActionForward execute (HttpServletRequest req, HttpServletResponse resp) throws Exception { System.out.println("@@@@ Action: MemberDeleteAction안의 execute() 실행됨" ); req.setCharacterEncoding("UTF-8" ); HttpSession session = req.getSession(); String id = (String) session.getAttribute("id" ); String pw = req.getParameter("pw" ); ActionForward forward = new ActionForward (); if (id == null ){ forward.setPath("./MemberLogin.me" ); forward.setRedirect(true ); return forward; } MemberBean mb = new MemberBean (); MemberDAO mdao = new MemberDAO (); int result = mdao.deleteMember(id, pw); resp.setContentType("text/html; charset=UTF-8" ); PrintWriter out = resp.getWriter(); if (result == 0 ){ out.print("<script>" ); out.print("alert('비밀번호오류');" ); out.print("history.back();" ); out.print("</script>" ); out.close(); return null ; }else if (result == -1 ){ out.print("<script>" ); out.print("alert('존재하지 않는 아이디입니다');" ); out.print("history.back();" ); out.print("</script>" ); out.close(); return null ; } session.invalidate(); System.out.println("@@@@ Action : 회원탈퇴성공 후 페이지이동 " ); out.print("<script>" ); out.print("alert('정상적으로 회원탈퇴되었습니다');" ); out.print("location.href='./Main.me';" ); out.print("</script>" ); out.close(); return null ; } }
MemberDAO.java의 deleteMember()메서드 추가 코드 작성1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 public int deleteMember (String id, String pw) { int result = -1 ; try { con = getCon(); sql = "select pw from itwill_member where id=?" ; pstmt = con.prepareStatement(sql); pstmt.setString(1 , id); rs = pstmt.executeQuery(); if (rs.next()){ if (pw.equals(rs.getString("pw" ))){ sql = "delete from itwill_member where id=?" ; pstmt = con.prepareStatement(sql); pstmt.setString(1 , id); pstmt.executeUpdate(); result = 1 ; System.out.println("회원삭제성공-아디일치,비번일치" ); }else { result = 0 ; System.out.println("회원삭제실패-아디일치,비번불일치" ); } }else { result = -1 ; System.out.println("회원삭제실패-아이디불일치" ); } } catch (Exception e) { e.printStackTrace(); } finally { closeDB(); } return result; }
#TIL ITWILL(JAVA)