본문 바로가기
다양한 기술들/레거시 Web 실습

[04] 회원정보변경

by 예스p 2023. 1. 6.

회원정보변경

마이페이지에서 로그인한 유저가 입력한 정보대로

DB를 업데이트 해보자


 

<< 이전포스팅에서 완료된 요청     |    이번포스팅에서 구현할 요청 >>

기능 url요청 요청시 전달값   응답페이지 또는 url재요청
  /web     index.jsp
로그인요청 /login.me userId=?&userPwd=? 실패시 views/common/errorPage.jsp
성공시 /web  url재요청=> index.jsp
로그아웃요청 /logout.me     /web  url재요청=> index.jsp
회원가입페이지 /enrollForm.me     views/member/memberEnrollForm.jsp
회원가입요청 /insert.me userId=? ... 등  실패시 views/common/errorPage.jsp
성공시 /web  url재요청 => index.jsp
마이페이지요청 /myPage.me   로그인전 /web   url재요청 => index.jsp
로그인후 views.member/myPage.jsp
정보변경요청
/update.me 
userId=? ... 등 실패시 view/common/errorPage.jsp
성공시 /myPage.me   url재요청 

회원정보변경

 


STEP1) myPage.jsp (수정)

  • form태그 action값에 수정처리할 서블릿의 매핑값을 입력한다.
  • 업데이트 성공 후, 마이페이지를 재요청할 것인데 session에 담겨있는 멤버객체는 변경 전의 멤버객체이다. 
    때문에 session을 갱신해야 한다는 것을 기억한다.
<form action="<%=contextPath%>/update.me" method="post">
.....

 

STEP2) MemberUpdateController.java

  • 생성위치 : com.br.member.controller
    서블릿/매핑값 update.me
  • post방식이고, 한글이 포함되어 있기 때문에 전달 전에 인코딩을 해야한다.
  • 체크박스는 복수선택 가능하여 request.getParameterValues() 함수 사용해서 배열로 가져온다.
    해당 값은 null여부 확인후 하나의 문자열로 가공처리한다.(db 기록용)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 1) 요청시 전달값 뽑기
    request.setCharacterEncoding("UTF-8");
    String userId = request.getParameter("userId");
    String userName = request.getParameter("userName");
    String[] interestArr = request.getParameterValues("interest");
    //배열로 반환된 데이터 가공처리
    String interest = "";
    if(interestArr != null) {
        interest = String.join(", ", interestArr);
    }
    Member m = new Member(userId, userName, interest);
		
    // 2) 요청처리
    // 업데이트가 성공한 후 다시 셀렉문 실행해서 조회해올 것이므로
    // int result가 아닌 Member로 받는다.
    Member updateMem = new MemberService().updateMember(m);
		
    // 3) 요청처리 결과를 가지고 사용자가 보게 될 뷰 지정
    if(updateMem == null) { //실패
        //에러문구 담아서 에러페이지 포워딩
        request.setAttribute("errorMsg", "회원정보 등록에 실패했습니다.");
        request.getRequestDispatcher("views/common/errorPage.jsp").forward(request, response);;
    }else { //성공
        // 알람띄우기
        HttpSession session = request.getSession();
        session.setAttribute("alertMsg", "성공적으로 회원정보를 수정했습니다.");
        // 변경된 회원정보를 반영시키기. 다시 담으면 덮어쓰기가 됨.
        session.setAttribute("loginUser", updateMem);
        // 응답페이지(views/member/myPage.jsp) 요청하기
        // 기능구현 표를 보면 해당 페이지를 응답하는 url존재 : /mypage.me
        response.sendRedirect(request.getContextPath()+"/myPage.me");
    }
}

 

 

STEP3) member-mapper.xml (수정)

  • Dao에서 사용할 sql문을 2가지를 작성한다
  • 1) Member테이블 업데이트
  • 2) 업데이트 된 회원 정보 조회하기
<entry key="updateMember">
    UPDATE MEMBER
       SET USER_NAME = ?
         , INTEREST = ?
         , MODIFY_DATE = SYSDATE
     WHERE USER_ID = ?	
</entry>
<entry key="selectMember">
    SELECT 
           USER_NO
         , USER_ID
         , USER_PWD
           .....
      FROM MEMBER
      WHERE USER_ID =  ?
        AND STATUS = 'Y'
</entry>

 

 

STEP4) MemberService.java (수정)

  • updateMember(Member m) 메소드 생성
  • 하나의 서비스안에 여러개의 sql문을 실행하게 된다.
public Member updateMember(Member m) {
    Connection conn = getConnection();
    //업데이트 먼저 실행
    int result = new MemberDao().updateMember(conn, m);
    Member updateMem = null;
    if(result>0) {
        commit(conn);
        //업데이트 성공 후 갱신된 회원 객체 다시 조회해오기 
        //==> 세션에 담긴 회원객체를 갱신시켜야되기 때문
        //회원을 조회하는 메소드가 있긴 하나(로그인에 사용했던 loginMember)
        //비밀번호를 모르기때문에 재사용 불가.
        updateMem = new MemberDao().selectMember(conn, m.getUserId());			
    }else {
        rollback(conn);
    }
    close(conn);
    return updateMem;
}

 

 

STEP5) MemberDao.java (수정)

  • updateMember(conn, m) 메소드 생성
  • selectMember(conn, userId) 메소드 생성
public int updateMember(Connection conn, Member m) {
    int result=0;
    PreparedStatement pstmt = null;
    String sql = prop.getProperty("updateMember");
    try {
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, m.getUserName());
        pstmt.setString(2, m.getInterest());
        pstmt.setString(3, m.getUserId());
        result = pstmt.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    }finally {
        close(pstmt);
    }
    return result;
}
public Member selectMember(Connection conn, String userId) {
    Member m = null;
    PreparedStatement pstmt = null;
    ResultSet rset = null;
    String sql = prop.getProperty("selectMember");
    try {
        pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, userId);
        rset = pstmt.executeQuery();
        //조회 됐는지 여부 확인후 정보옮기기
        if(rset.next()) {
            m = new Member(rset.getInt("USER_NO"),
                           rset.getString("user_id"),
                           .....);				
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        close(rset);
        close(pstmt);
    }
    return m;
}

 

 

 

 

 

 

댓글