본문 바로가기

개발/Web

[Java] Sevlet/JSP - 회원서비스 - 회원 탈퇴

회원서비스

 

< 회원 탈퇴 >

 

1. 회원탈퇴 화면

- 회원탈퇴 버튼

<button type="button" class="btn btn-sm btn-danger" data-toggle="modal" data-target="#deleteMember">회원탈퇴</button>

- 버튼 클릭 시 모달창이 보이도록 함

- 모달창에 form태그와 submit 버튼 달아서 요청, 요청시 전달값 보내기

<!-- 회원 탈퇴 모달창 -->
<div class="modal" id="deleteMember">
    <div class="modal-dialog">
        <div class="modal-content">

            <!-- Modal Header -->
            <div class="modal-header">
                <h4 class="modal-title">회원 탈퇴</h4>
                <button type="button" class="close" data-dismiss="modal">&times;</button>
            </div>

            <!-- Modal body -->
            <div class="modal-body">
                <form action="<%= contextPath %>/deleteMember.me" method="post">
                    <table>
                        <tr>
                            <td>비밀번호</td>
                            <td><input type="password" name="userPwd" required></td>
                        </tr>
                    </table>
                    <br>
                    <button type="submit" class="btn btn-sm btn-primary"">탈퇴</button>
                </form>
            </div>
        </div>
    </div>
</div>

 

2. MemberDeleteController.java (Servlet)

- 매핑값 : /deleteMember.me

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    request.setCharacterEncoding("UTF-8");

    String userPwd = request.getParameter("userPwd");

    // session에 담겨있는 기존 로그인된 사용자의 정보를 얻어옴
    HttpSession session = request.getSession();
    String userId = ((Member)session.getAttribute("loginUser")).getUserId();

    int result = new MemberService().deleteMember(userId, userPwd);

    if (result > 0) { // 탈퇴 성공
        session.removeAttribute("loginUser");
        response.sendRedirect(request.getContextPath());
    } else { // 탈퇴 실패
        request.setAttribute("errorMsg", "회원 탈퇴에 실패했습니다.");
        request.getRequestDispatcher("views/common/errorPage.jsp").forward(request, response);
    }
}

 

3. MemberService.java (자바Class)

- deleteMember()

public int deleteMember(String userId, String userPwd) {

    Connection conn = JDBCTemplate.getConnection();

    int result = new MemberDao().deleteMember(conn, userId, userPwd);

    if (result > 0) { // 탈퇴 성공
        JDBCTemplate.commit(conn);
    } else { // 탈퇴 실패
        JDBCTemplate.rollback(conn);
    }
    
    JDBCTemplate.close(conn);

    return result;
}

 

4. MemberDao.java

- deleteMember()

public int deleteMember(Connection conn, String userId, String userPwd) {
    // UPDATE : STATUS = 'Y' => STATUS = 'N'
    int result = 0;
    PreparedStatement pstmt = null;
    String sql = prop.getProperty("deleteMember");

    try {
        pstmt = conn.prepareStatement(sql);

        pstmt.setString(1, userId);
        pstmt.setString(2, userPwd);

        result = pstmt.executeUpdate();

    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        JDBCTemplate.close(pstmt);
    }

    return result;
}

- SQL문

- 회원 정보를 완전히 삭제하는 DELETE문이 아닌, STATUS컬럼의 값을 바꾸는 UPDATE문 실행

<entry key="deleteMember">
    UPDATE
           MEMBER
       SET
           STATUS = 'N'
     WHERE
           USER_ID = ? AND USER_PWD = ?
</entry>