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");//objectstring으로 다운캐스팅
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
	//15.회원탈퇴
}else if(command.equals("/MemberDelete.me")){
System.out.println("@@@@ Controller : 가상주소 /MemberDelete.me 실제주소: ./member/deleteForm.jsp");
//DB정보가 필요없기때문에 바로 view페이지로 전환
//페이지 이동하기 위한 객체 ActionForward()객체 생성
forward = new ActionForward();
forward.setPath("./member/deleteForm.jsp");
forward.setRedirect(false);//주소전환없이 jsp페이지가 보여야함 forwarding방식
}else if(command.equals("/MemberDeleteAction.me")){
// new MemberDeleteAction() 객체 생성
action = new MemberDeleteAction();
try{
forward = action.execute(req, resp); //어차피 null에서 foward에 넣지 않아도 됨
} catch (Exception e){
e.printStackTrace();
}
}




deleteForm.jsp 생성

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타입중 hidden은 화면에 있는 해당 input태그를 숨겨서 정보 전달 -->
아이디 : <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() 실행됨");
//1. 한글처리
req.setCharacterEncoding("UTF-8");
//2.세션, 파라미터 정보 가져오기
HttpSession session = req.getSession();
String id = (String) session.getAttribute("id");
String pw = req.getParameter("pw");

ActionForward forward = new ActionForward();
if(id == null){
//model2방식이므로 req.sendRedirect()가 아닌 ActionForward방식으로 이동
forward.setPath("./MemberLogin.me");
forward.setRedirect(true);
return forward;
}

MemberBean mb = new MemberBean();
MemberDAO mdao = new MemberDAO();
int result = mdao.deleteMember(id, pw);

//자바스크립트사용하여 alert()창띄우기
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; //null이란 Controller에서 페이지 이동하지않겠다는 의미
}else if(result == -1){
out.print("<script>");
out.print("alert('존재하지 않는 아이디입니다');");
out.print("history.back();");
out.print("</script>");
//자원해제(필수! 까먹지마!)
out.close();
return null; //null이란 Controller에서 페이지 이동하지않겠다는 의미
}

//if(result == 1)
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
//7.delete구현
public int deleteMember(String id, String pw){
int result = -1;
try {
//7-1. DB연결메서드 불러오기
con = getCon();
//7-2. SQL & pstmt 생성
sql = "select pw from itwill_member where id=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
//7-3. 실행 -> rs저장
rs = pstmt.executeQuery();
//7-4. 데이터처리 : DB에 있는 회원인 경우 삭제, 아닌 경우 에러
if(rs.next()){
if(pw.equals(rs.getString("pw"))){
//7-5. 비번일치하면 정보삭제 작업
//7-5-1. SQL 구문작성 & pstmt 생성
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;
}//delete닫힘