카테고리 없음

#53. JSP/Servlet 회원(마이페이지, 회원정보변경)

열하나요 2023. 9. 14. 13:49

52.-1. 마이페이지

 

1. 마이페이지를 누르면 지정한 경로로 이동

mebubar.jsp

<a href="<%= contextPath %>/myPage.me">마이페이지</a>

=> Controller의 매핑값으로 받는다.

 

 

2. Controller에서 보낸값을 받아줄 화면 

 

 

53-2. 회원정보 수정

 

 

 

 

 

53-3. 비밀번호 수정

1. 마이페이지의 비밀번호 수정 버튼 클릭 시 모달창 나오게

<button type="button" class="btn btn-warning btn-sm" data-toggle="modal" data-target="#updatePwdForm">비밀번호 수정</button>

<button type="button" class="btn btn-warning btn-sm" data-toggle="modal" data-target="#updatePwdForm">비밀번호 수정</button>

 

2. 모달창 jsp

myPage.jsp

    <!-- 비밀번호 수정 모달창 -->
    <!-- The Modal -->
    <div class="modal" id="updatePwdForm">
        <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 method="post" action="<%= contextPath %>/updatePwd.me">

                        <!-- 현재 비밀번호, 변경할 비밀번호, 변경할 비밀번호 재입력 -->
                        <div class="form-group">
                            <label for="userPwd">현재 비밀번호:</label>
                            <input type="password" class="form-control" placeholder="비밀번호를 입력해 주세요." id="userPwd" name="userPwd" required>
                        </div>
                        <div class="form-group">
                            <label for="updatePwd">변경할 비밀번호:</label>
                            <input type="password" class="form-control" placeholder="변경할 비밀번호를 입력해 주세요." id="updatePwd" name="updatePwd">
                        </div>
                        <div class="form-group">
                            <label for="checkPwd">변경할 비밀번호 확인:</label>
                            <input type="password" class="form-control" placeholder="변경할 비밀번호를 다시 입력해 주세요." id="checkPwd" required>
                        </div>
                        
                        <!-- 방법2. hidden으로 값 가져오기 --> 
                        <input type="hidden" name="userNo" value="<%= loginUser.getUserNo() %>">
                        

                        <button type="submit" onclick="return validatePwd();" class="btn btn-sm btn-secondary">비밀번호 변경</button>

                        <script>
                            function validatePwd(){

                                if($('#updatePwd').val() != $('#checkPwd').val()){
                                    alert('비밀번호를 동일하게 입력해 주세요.');
                                    $('#checkPwd').focus();
                                    return false;
                                }
                                return true;
                            }
                        </script>
                    </form>
                </div>
                <!-- Modal footer -->
                <div class="modal-footer">
                    <button type="button" class="btn btn-danger" data-dismiss="modal">취소</button>
                </div>
            </div>
        </div>
  </div>

 

3. jsp의 form태그 안 action값에 맞는 매핑값 같은 Servlet

MemberUpdatePwdController.java

package com.kh.jsp.member.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.kh.jsp.member.model.service.MemberService;
import com.kh.jsp.member.model.vo.Member;

/**
 * Servlet implementation class MemberUpdatePwdController
 */
@WebServlet("/updatePwd.me")
public class MemberUpdatePwdController extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public MemberUpdatePwdController() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// 1) POST방식 -> 인코딩
		request.setCharacterEncoding("UTF-8");
		HttpSession session = request.getSession(); // 방법1. session으로 값 가져오기
		
		Member loginUser = ((Member)session.getAttribute("loginUser"));
		
		int userNo = loginUser.getUserNo(); // 방법1. session으로 값 가져오기
		String userId = loginUser.getUserId();
		int num = Integer.parseInt(request.getParameter("userNo")); // 방법2. hidden으로 값 가져오기(myPage.jsp에서)
		
		// 2) request로 값 뽑기
		String userPwd = request.getParameter("userPwd");
		String updatePwd = request.getParameter("updatePwd");
		
		// 3) VO객체에 담아서 가공 => 이번에는 그냥 넘기기
		// UPDATE MEMBER SET USER_PWD = updatePwd WHERE USER_ID = ??????
		// 											AND USER_PWD = userPwd
		// 											AND STATUS = 'Y'
		
		// 4) Service단으로 넘기기
		int result = new MemberService().updatePwdMember(userNo, userPwd, updatePwd);
		
		// 5) 결과값을 통해서 성공 실패 여부에 따른 응답화면 지정
		if(result > 0) {
			session.setAttribute("alertMsg", "비밀번호 변경에 성공하셨습니다!");
			// Member updateMem = new MemberService().selectMember(userId);
			session.setAttribute("loginUser", new MemberService().selectMember(userId));
		} else {
			session.setAttribute("alertMsg", "비밀번호 변경에 실패했습니다...");
		}
		
		// 성공이든 실패든 마이페이지로 돌려줄 것
		response.sendRedirect(request.getContextPath() + "/myPage.me");
		
		
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 

나중에 sql에서 userNo(PK)도 같이 넘겨줘야하는데,

방법1. session에 있는 userNo 값 가져오기

HttpSession session = request.getSession(); // 방법1. session으로 값 가져오기
		
int userNo = ((Member)session.getAttribute("loginUser")).getUserNo(); // 방법1. session으로 값 가져오기

 

방법2. hidden으로 userNo 가져오기

<!-- 방법2. hidden으로 값 가져오기 --> 
<input type="hidden" name="userNo" value="<%= loginUser.getUserNo() %>">
int num = Integer.parseInt(request.getParameter("userNo")); // 방법2. hidden으로 값 가져오기(myPage.jsp에서)

 

4. Service

public int updatePwdMember(int userNo, String userPwd, String updatePwd) {

    Connection conn = JDBCTemplate.getConnection();

    // 비밀번호 update관련 DAO메소드 호출
    int result = new MemberDao().updatePwdMember(conn, userNo, userPwd, updatePwd);

    if(result > 0) {
        JDBCTemplate.commit(conn);
    } else {
        JDBCTemplate.rollback(conn);
    }

    JDBCTemplate.close(conn);

    return result;
}

 

5. Dao

public int updatePwdMember(Connection conn, int userNo, String userPwd, String updatePwd) {

    // UPDATE문 => 처리된 행의 개수
    int result = 0;
    PreparedStatement pstmt = null;
    String sql = prop.getProperty("updatePwdMember");

    try {
        pstmt = conn.prepareStatement(sql);

        pstmt.setString(1, updatePwd);
        pstmt.setInt(2, userNo);
        pstmt.setString(3, userPwd);

        result = pstmt.executeUpdate();

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

 

53-4. 회원탈퇴

 

 

 

 

 

 

***오류뜨면 확인

name속성값 잘 줬나?

action값 잘 줬나?

submit 타입 잘 넣었나?

value값에 공백이 들어가지는 않았나?